2012-04-07 17 views
5

विफल रहता है मैं एक GeForce 330m पर चल रहे मेरे ज्यामिति शेडर से एक पूर्णांक बनावट का नमूना देने की कोशिश कर रहा हूं। ऐसा लगता है कि मैं बनावट में लोड करने से अन्य मूल्यों को वापस कर रहा हूं। मैं बनाने और बनावट लोड करने के लिए इस कोड (मूल रूप से) का उपयोग करें:ओपनगल ज्यामिति शेडर पूर्णांक बनावट fetch

glGenTextures(1, &textureId); 
glBindTexture(GL_TEXTURE_2D, textureId); 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32I, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 
glBindTexture(GL_TEXTURE_2D, 0); 
glBindTexture(GL_TEXTURE_2D, textureId); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32I, w, h, 0, GL_RGBA, GL_INT, <some 0-initialized large enough buffer>); 
glBindTexture(GL_TEXTURE_2D, 0); 
glBindTexture(GL_TEXTURE_2D, textureId); 
    int data[] = { 3, 0, 36, 400 }; 
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 3, 1, 1, GL_RGBA, GL_INT, data); 
glBindTexture(GL_TEXTURE_2D, 0); 

विचार यह है कि विशिष्ट में एक पिक्सेल मैं तो मेरे ज्यामिति शेडर में इस का उपयोग 400 के एक w-मूल्य के लिए सेट कर दिया जाता है:

#version 330 
#extension GL_EXT_gpu_shader4 : require 
uniform isampler2D models; 

void main() 
{ 
    ivec4 modelstats4 = texelFetch2D(models, ivec2(0, 3), 0); 
// ivec4 modelstats4 = ivec4(3, 0, 36, 400); 
    if (modelstats4.w > height) { 
     // emit something 
    } 
} 

टिप्पणी-आउट निश्चित मानों का उपयोग करना जो उत्सर्जित (आईई, एक बिंदु) में बराबर परिणाम होना चाहिए। यदि मैं वास्तविक टेक्क्सल लाने का उपयोग करता हूं तो यह कुछ भी वापस नहीं करता है। जिन मूल्यों के बारे में मुझे पता है, उनके प्रभाव पर अब असर पड़ सकता है, इसलिए मुझे नुकसान हुआ है कि यह क्यों काम नहीं करता है। यह पूर्ण कोड नहीं है (ओओ सेटअप, देखने के लिए काफी कुछ है) लेकिन ये लागू डेटा के साथ प्रासंगिक ओपनजीएल कॉल हैं।

+0

आपको अपने प्रश्न का उत्तर देना चाहिए या इसे हटाना चाहिए। क्योंकि यह केवल अनुत्तरित प्रश्न सूची में रहता है :) – kravemir

+0

धन्यवाद मिरो, उसे नहीं पता था। – dascandy

उत्तर

4

glGetErrors के उदार छिड़कने के माध्यम से समाधान मिला। त्रुटि इस कोड उदाहरण में प्रत्येक glTexImage में थी - स्पष्ट रूप से, एक पूर्णांक बनावट के लिए आपको GL_RGBA का उपयोग नहीं करना चाहिए, लेकिन GL_RGBA_INTEGER।

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32I, w, h, 0, GL_RGBA_INTEGER, GL_INT, data); 

यह अब काम करता है। बनावट लाने के लिए भी ठीक है।

संबंधित मुद्दे