我正在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
所以我不得不怀疑我错过了统一向量的东西。有什么建议吗?
答案 0 :(得分:0)
正如Reto在评论中指出的那样,我错过了呼叫
glUseProgram()
随着这一点的增加,我现在可以把一切都搞定。