首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >片段着色器中的数组索引

片段着色器中的数组索引
EN

Stack Overflow用户
提问于 2011-01-11 01:03:17
回答 1查看 1.4K关注 0票数 0

这是我的第一篇文章,我最近才开始为Android和OpenGl编程,所以请对我好一点:)

我正在写一个小应用程序,将包括一个屏幕,将使用调色板图像的颜色快速变化。为了提高速度,我想我可以使用着色器实现系统,所以我使用Open GL ES 2.0编程指南中的奇妙示例启动并运行了一个着色器。过去几天我一直在思考的问题是想出一种在着色器中引用我的调色板数据的方法。

我的着色器当前是:

代码语言:javascript
复制
precision lowp float;
varying vec2      v_texCoord;
uniform sampler2D s_texture;
uniform int       s_palette[204];  // Specify a palette of 64 rgb entries

void main()
{
   vec4 col = texture2D( s_texture, v_texCoord );
   int index = (int(col.r * 255.0) * 3;

   gl_FragColor = vec4(float(s_palette[index]) / 255.0, float(s_palette[index+1]) / 255.0,  float(s_palette[index+2]) / 255.0, 1.0);
}

在尝试了很长时间之后,我发现如果我通过一个常量值引用我的调色板数据,我可以得到结果,但不是通过引用一个变量。在用Google搜索了一段时间后,我发现这正是GLSL 1.1的方式,并在GLSL 1.3中得到了修复。我相信Android是在基于GLSL 1.3的GLSL ES1.0上运行的,所以它应该可以工作,但我的一生都不能让它工作。我在GLSLES规范中也找不到任何东西表明这是不可能的,那么我哪里错了呢?

如果这根本不可能,那么有没有人有其他想法来绕过我的计划中这个相当严重的缺陷呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-11 01:27:13

不,常量数组不能被变量索引,但你可以很容易地使用纹理而不是常量数据数组来进行调色板查找。使用GLSL2D纹理,并在Nx1中使用texture2D进行查找。

当然,您需要使用OpenGL中的普通纹理函数从CPU端加载纹理数据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4649345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档