Я использую opengles 2.0. Я пытаюсь передать целочисленное значение в вершинный шейдер. Мой клиент код выглядит так:GLSL Передача целочисленного атрибута вершины
glEnableVertexAttribArray(3); // Bones
glVertexAttribPointer(3, 4, GL_UNSIGNED_SHORT, GL_FALSE, object->m_mesh->GetVertexSize(), (const void*)offset);
И код шейдера вершина:
attribute vec4 vBones;
uniform Bone bones[64];
gl_Position = bones[int(vBones.x)].transform * bones[int(vBones.x)].bindPose * vec4(vPosition, 1.0) * vWeights.x;
Если я скомпилировать код, как это. Все «vBones.xyzw» становятся 0, и я получаю unskinned сетку. Поскольку 0 относится к единичной матрице.
, если я изменю код клиента к этому:
glVertexAttribPointer(3, 4, GL_INT, GL_FALSE, object->m_mesh->GetVertexSize(), (const void*)offset);
код работает без anyerror в окнах. Однако, когда я скомпилировал его в webgl через emscripten, я получаю gl error 1282 (Invalid Operation)
Так кратко, можете ли вы привести пример передачи атрибута int vertex в glsl?
'GL_INT' не в списке действительных параметры. Источник: https://www.khronos.org/opengles/sdk/docs/man/xhtml/glVertexAttribPointer.xml –
Да, но он отлично работает в Windows :) – Cihan
Поскольку вы, скорее всего, не используете OpenGL ES для Windows. –