在IOS上的openGL ES 3中加载统一vec / mat的问题

时间:2015-12-16 14:19:52

标签: ios opengl-es opengl-es-3.0

我正在IOS上用GPU做重型线性代数,所以我正在尝试使用openGL ES 3.0。我从Bartosz Ciechanowski's toy code开始研究一些通用的逐个矩阵乘法。我将大的一个分成矢量,并使用一组均匀矩阵来表示较小的矩阵。我已设法输入并输出顶点着色器,但无法获得均匀的矩阵,因为它总是看起来是空的。这是我做的:

在顶点着色器中,我只是复制我在均匀向量中发送的内容:

uniform vec3 transMat0;
uniform vec3 transMat1;
in vec2 InV0;
out vec2 OutV0;
void main(){    
    OutV0 = vec2(transMat0.x,transMat1.y);
//    OutV0 = InV0+vec2(1.0,2.0); //this works
}

在ObjC代码中,我将缓冲区内容声明为全局变量:

static GLfloat mat0Data[] = {1000.0,100.0,10.0,1.0,0.1,0.01};//outside methods
static GLfloat mat1Data[] = {1000.0,100.0,10.0,1.0,0.1,0.01};//outside methods

在我编译着色器并生成程序句柄的地方,我附加了缓冲区:

GLuint mat0 = glGetUniformLocation(program, "transMat0");
GLuint mat1 = glGetUniformLocation(program, "transMat1");
glUniform3fv(mat0, 1, &(mat0Data[0]));
glUniform3fv(mat1, 1, &(mat1Data[0]));

输出缓冲区只读取全部0.只是为了证明其他所有工作,当我使用注释行时,我可以在转换反馈中得到正确的结果

OutV0 = InV0+vec2(1.0,2.0); //this works

所以我不得不怀疑我错过了统一向量的东西。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

正如Reto在评论中指出的那样,我错过了呼叫

glUseProgram()

随着这一点的增加,我现在可以把一切都搞定。