gpt4 book ai didi

ios - gl 纹理采样器总是在 iOS 上返回 vec4(0.,0.,0.,1.)(但在 OSX/Android 上可用)

转载 作者:可可西里 更新时间:2023-11-01 04:45:09 24 4
gpt4 key购买 nike

我的代码只是将一些人为的数据上传到纹理:

glActiveTexture(GL_TEXTURE0+gl_sim_texture_active_n);
glBindTexture(GL_TEXTURE_2D, gl_sim_texture_buff_id);
for(int i = 0; i < w*h; i++) buff[i] = 0xAB;
glTexImage2D(GL_TEXTURE_2D,0,GL_ALPHA,w,h,0,GL_ALPHA,GL_UNSIGNED_BYTE,buff);

以及仅从我的着色器中的纹理采样的代码:

uniform vec2 viewport;
uniform sampler2D sim_texture;
void main()
{
vec2 tex_uv = vec2(gl_FragCoord.x/(viewport.x-1.),gl_FragCoord.y/(viewport.y-1.));
gl_FragColor = texture2D(sim_texture,tex_uv).argb; //swizzle is to just put 'a' in a visibly renderable position as "redness"
}

在 OSX 和 Android 上,这个纹理在我的着色器中是可读的(通过 sampler2D - 没什么特别的) - 它有效。在 iOS 上,来自该 sampler2D 的任何样本都会返回 vec4(0.,0.,0.,1.) ,无论输入的数据如何。

(请注意,当我将 GL_ALPHA 更改为 GL_RGBA 时,将纹理附加到帧缓冲区,然后在 glReadPixels 之后调用 glTexImage2D确实取回了我放入的确切数据在,无论平台如何,功能(或在 iOS 上缺乏)保持不变。切换到 GL_RGBA 只需要将其附加到帧缓冲区,这对于 glReadPixels 是必需的,我只关心调试目的。tl;dr:我有理由相信数据已在所有平台上正确上传到纹理。)

其他信息:

gl_sim_texture_active_n是 6,gl_sim_texture_buff_id是 14(均合法且无错误地获得)。打电话glGetError()glCheckFramebufferStatus(GL_FRAMEBUFFER)在两者都返回干净之前或之后。 glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS)返回 8(与我的测试 Android 设备相同。

我完全不知道为什么这会在 OSX/Android 而不是 iOS 上运行。关于从这里去哪里的任何方向都会有所帮助!

最佳答案

啊,我找到了!

GL_REPEAT 不支持非 POT 纹理! ( GLSL texture2D() always returns (0, 0, 0, 1) ) 已修复!

关于ios - gl 纹理采样器总是在 iOS 上返回 vec4(0.,0.,0.,1.)(但在 OSX/Android 上可用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39620371/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com