我會保持它的簡單:在這篇文章的末尾列出的代碼是在頂部至底部我的項目中爲了我有一個OGLES2。 。在地方0框架,它完美地呈現不同的紋理一切當渲染一個紋理所有我看到的是正確尺寸的黑盒子的OpenGL ES 2.0:紋理呈現黑色,幾個小時不:(
這是我已經驗證:
有輸出紋理字節(它的格式
GL_ALPHA
)它清楚地看到有零,沒有零值,所以數據看起來是正確的(或者至少不是全黑!)。紋理ID是正確的,通過使用在頂點着色器下面驗證:
gl_FragColor=vec4(v_texCoord.xy,0.0,1.0);
..和觀察預期black->green->yellow->red
彩色流從(0,0)->(0,1)->(1,1)->(1,0)
移動能夠被看見。我的紋理具有兩個維度的功率:
256 x 64
,正確地反映數據陣列英寸
我會非常感謝幫助確定什麼是錯誤的,因爲經過幾個小時的谷歌搜索和刺激我很難過!
glGenTextures(1, &_textureId);
GLint savedId;
glGetIntegerv(GL_TEXTURE_BINDING_2D, &savedId);
glBindTexture(GL_TEXTURE_2D, _textureId);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
GLenum datatype = -1;
GLenum format = -1;
switch([self pixelFormat]) {
case kGLTexturePixelFormat_RGBA8888:
format=GL_RGBA;
datatype=GL_UNSIGNED_BYTE;
break;
case kGLTexturePixelFormat_RGB565:
format=GL_RGB;
datatype=GL_UNSIGNED_SHORT_5_6_5;
break;
case kGLTexturePixelFormat_A8: // * This is current format, used for testing.
format=GL_ALPHA;
datatype=GL_UNSIGNED_BYTE;
break;
default:
[NSException raise:NSInternalInconsistencyException format:@""];
}
glTexImage2D(GL_TEXTURE_2D, 0, format, [self pixelsWide], [self pixelsHigh], 0, format, datatype, [self data]);
glBindTexture(GL_TEXTURE_2D, savedId);
//...
GLint s_textureId = glGetUniformLocation(program, "s_texture");
//...
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, [_textureAtlas textureId]);
glUniform1i(s_textureId, 0);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
// In vertex shader:
attribute vec2 a_texCoord;
varying vec2 v_texCoord;
uniform sampler2D s_texture;
void main() {
// ...
v_texCoord = a_texCoord;
}
// In fragment shader:
varying vec2 v_texCoord;
uniform sampler2D s_texture;
void main() {
// ...
gl_FragColor = texture2D(s_texture, v_texCoord);
}
太感謝你了,你說的完全正確!我修改爲使用.aaaa,現在我可以看到我的文本:-)非常,非常感謝,有一杯啤酒。 – KomodoDave 2012-01-16 21:51:44
@KomodoDave歡迎您,歡呼聲;) – rotoglup 2012-01-16 21:52:58