我第一次尝试。我有两个使用vertexAttribDivisorANGLE的属性缓冲区。我把位置和旋转数据放在一个属性缓冲区中,纹理数据放在另一个属性缓冲区中。我在一个纹理中使用精灵纸,所以我必须发送我想要绘制的每个“框架”的起始位置和尺寸。位置/旋转缓冲区显示良好,但在桌面铬上纹理缓冲区似乎间歇性损坏。您将看到纹理的闪烁正确显示,但您主要是看到整个雪碧表映射到四边形或只是随机噪音。它在移动铬上似乎呈现得很完美。缓冲区有不同的除数,如果这有区别的话。
我似乎找不到任何结果时,搜索的信息,损坏的顶点缓冲区之间的差异,移动和桌面可能呈现。
下面是一个现场演示:http://industriousthought.com/glLab.html
发布于 2017-10-05 09:33:53
问题似乎是,如果你的顶点着色器在drawCircles-vertex-shader矩阵,poseM没有完全初始化。这是你的着色器的一部分
mat4 poseM;
poseM[0][0] = 1.0 / a_pose.z;
poseM[1][1] = 1.0 / a_pose.w;
poseM[2][2] = 1.0;
poseM[3][3] = 1.0;
poseM[3][0] = 1.0 / a_pose.z * a_pose.x;
poseM[3][1] = 1.0 / a_pose.w * a_pose.y;将矩阵的剩余分量初始化为零会产生一个看似合理的结果:
mat4 poseM;
poseM[0][0] = 1.0 / a_pose.z;
poseM[0][1] = 0.0;
poseM[0][2] = 0.0;
poseM[0][3] = 0.0;
poseM[1][0] = 0.0;
poseM[1][1] = 1.0 / a_pose.w;
poseM[1][2] = 0.0;
poseM[1][3] = 0.0;
poseM[2][0] = 0.0;
poseM[2][1] = 0.0;
poseM[2][2] = 1.0;
poseM[2][3] = 0.0;
poseM[3][0] = 1.0 / a_pose.z * a_pose.x;
poseM[3][1] = 1.0 / a_pose.w * a_pose.y;
poseM[3][2] = 0.0;
poseM[3][3] = 1.0;

用于初始化矩阵的较短版本:
mat4 poseM = mat4(1.); // Initializes matrix to identity
poseM[0][0] = 1.0 / a_pose.z;
poseM[1][1] = 1.0 / a_pose.w;
poseM[3][0] = 1.0 / a_pose.z * a_pose.x;
poseM[3][1] = 1.0 / a_pose.w * a_pose.y;https://stackoverflow.com/questions/46569370
复制相似问题