Tag: glsles

iPad Opengl ES程序在模拟器上工作正常,但不是设备

对于该设备,除了一个之外,我的所有着色器都可以正常加载。 对于这个着色器程序,当我调用glGetProgramInfoLog(…)时,得到“片段程序无法编译当前上下文状态”的错误,接着出现类似的顶点着色器错误。 顶点着色器: #version 100 uniform mat4 Projection; uniform mat4 Modelview; uniform mat4 Rotation; uniform vec3 Translation; uniform vec4 LightDirection; uniform vec4 MaterialDiffuse; uniform float MaterialShininess; attribute vec3 position; attribute vec3 normal; varying vec4 color; varying float specularCoefficient; void main() { vec3 _normal = normalize(mat3(Modelview[0].xyz, Modelview[1].xyz, Modelview[2].xyz)*normal); // There is an easier way to do […]

如何在GLSL ES中编写const数组

我想为iPhone上的OpenGL ES应用程序编写一个简单的顶点着色器,但是我的数组构造函数正在给我带来麻烦。 attribute vec4 normal; attribute vec4 position; void main(void){ const vec4 vertices[3] = vec4[](vec4(0.25, -0.25, 0.5, 1.0), vec4(-0.25, -0.25, 0.5, 1.0), vec4(0.25, 0.25, 0.5, 1.0)); gl_Position = vertices[gl_VertexID]; } 当使用这段代码时,着色器无法编译,并给出了错误信息: 错误:0:13:'(':语法错误:数组大小必须出现在variables名称后面

在iOS上使用OpenGL ES 2.0进行实例化绘图

简而言之: 任何人都可以确认是否有可能使用内置variablesgl_InstanceID (或gl_InstanceIDEXT )在顶点着色器上使用OpenGL ES 2.0在iOS上启用GL_EXT_draw_instanced ? 更长: 我想使用glDrawArraysInstanced和gl_InstanceID绘制一个对象的多个实例,我希望我的应用程序可以在多个平台(包括iOS)上运行。 规范明确指出,这些function需要ES 3.0。 根据iOS设备兼容性参考 ES 3.0仅在less数设备(基于A7 GPU;因此是iPhone 5s,但不在iPhone 5或更早版本)上可用。 所以我的第一个假设是我需要避免在旧的iOS设备上使用实例化的绘图。 但是,在兼容性参考文档中, 更进一步说,所有的SGX系列5处理器(包括iPhone 5和4s)都支持EXT_draw_instanced扩展。 这让我觉得我确实可以在老版本的iOS设备上使用实例化绘图,查找和使用glDrawArraysInstanced的扩展函数(EXT或ARB)。 我目前只是在Windows上运行一些使用SDL和GLEW的testing代码,所以我还没有在iOS上testing任何东西。 但是,在我目前的设置中,我无法在顶点着色器中使用gl_InstanceID内置variables。 我收到以下错误信息: 'gl_InstanceID':variables在当前的GLSL版本中不可用 在GLSL中启用“draw_instanced”扩展名不起作用: #extension GL_ARB_draw_instanced : enable #extension GL_EXT_draw_instanced : enable 当我特别声明我需要ES 3.0(GLSL 300 ES)时,错误消失: #version 300 es 尽pipe在ES 2.0环境下,我的Windows桌面机器似乎能正常工作,但我怀疑这是否适用于iPhone 5。 那么,我是否应该放弃在旧iOS设备上使用实例化绘图的想法?

为什么1.0的纹理坐标超出了纹理的边缘?

我正在做一个颜色查找使用纹理应用效果的图片。 我的查找是使用第一个纹理片段的亮度的梯度图,然后在第二个纹理上查看。 第二个纹理是256×256,水平渐变和几个不同的渐变从上到下。 所以32个水平条纹每8个像素高。 我在x上的查找是亮度,在y上它是一个渐变,我瞄准条纹的中心,以避免交叉。 我的片段着色器看起来像这样: lowp vec4 source = texture2D(u_textureSampler, v_fragmentTexCoord0); float luminance = 1.0 – dot(source.rgb, W); lowp vec2 texPos; texPos.x = clamp(luminance, 0.0, 1.0); // the y value selects which gradient to use by supplying a T value // this would be more efficient in the vertex shader texPos.y = clamp(u_value4, 0.0, […]