- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我可以编译、链接和运行 GLSL 程序,但无法提取所有属性的句柄。
const std :: string v = shaders .read_file (VERTEX_SHADER);
const std :: string f = shaders .read_file (FRAGMENT_SHADER);
std :: cout
<< "Vertex shader:\n" << v
<< "Fragment shader:\n" << f
<< "End of shaders.\n";
// Create objects
auto f_id = glCreateShader (GL_FRAGMENT_SHADER);
auto v_id = glCreateShader (GL_VERTEX_SHADER);
auto p = glCreateProgram ();
// Success flags
GLint v_ok, f_ok, p_ok;
// Compile vertex shader
const GLchar * source = v .c_str ();
GLint length = v .size ();
glShaderSource (v_id, 1, & source, & length);
glCompileShader (v_id);
glGetShaderiv (v_id, GL_COMPILE_STATUS, &v_ok);
// Compile fragment shader
source = f .c_str ();
length = f .size ();
glShaderSource (f_id, 1, & source, & length);
glCompileShader (f_id);
glGetShaderiv (f_id, GL_COMPILE_STATUS, &f_ok);
// Link
glAttachShader (p, v_id);
glAttachShader (p, f_id);
glLinkProgram (p);
glGetProgramiv (p, GL_LINK_STATUS, &p_ok);
if (f_ok && v_ok && p_ok)
{
std :: cout << "Build OK\n";
for (auto n : {"normal", "position", "xxx", "fail"})
{
auto a = glGetAttribLocation (p, n);
std :: cout << n <<" is " << a << std :: endl;
}
}
else
std :: cout << "Build failed.\n";
assert (GL_NO_ERROR == glGetError ());
我希望找到“normal”、“position”和“xxx”属性,而不是“fail”。这是输出。
Vertex shader:
#version 130
attribute vec3 normal;
attribute vec3 position;
attribute vec3 xxx;
void main ()
{
gl_Position = vec4 (position, 1);
}
Fragment shader:
#version 130
out vec4 finalColor;
void main ()
{
finalColor = vec4 (1.0, 1.0, 1.0, 1.0);
}
End of shaders.
Build OK
normal is -1
position is 0
xxx is -1
fail is -1
当我实际运行它时,我得到了预期的未转换的白色三角形。为什么只有“位置”加载正确?
最佳答案
出于同样的原因,制服只有在使用时才能保证存在。如果您尝试查询它们,您的着色器未使用的任何制服、属性或其他定义的资源可能不存在。
关于opengl - glGetAttribLocation 仅在某些时候有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18227794/
我可以编译、链接和运行 GLSL 程序,但无法提取所有属性的句柄。 const std :: string v = shaders .read_file (VERTEX_SHADER); const
我可以编译、链接和运行 GLSL 程序,但无法提取所有属性的句柄。 const std :: string v = shaders .read_file (VERTEX_SHADER); const
我试图通过 pyopengl 和 pygame 使用 python 制作月球模型/模拟。我在 .obj 文件中使用了月球的开源 3D 模型,并尝试将其合并到我的代码中。但由于某种原因,出现了标签为 的
glGetAttribLocation 在我的 3 个属性(颜色)之一上返回 -1。检查错误、状态等,一切都会返回正数。在 Android 7 上使用 OpenGL ES2。只是找不到原因,颜色的设置
在 iOS 设备上绑定(bind)属性是否明智(以及如何选择要绑定(bind)的索引号)?在我的应用程序中,我有几个着色器,跟踪所有属性/制服变得很麻烦。但我读过 nVidia imposes res
我正在尝试使用 OpenGL2.0 并在 3D 空间中为 Android 设备创建多个立方体。 它的代码在某些设备上运行完美,但在其他设备上运行不佳,我不知道为什么......(所有设备都支持 Ope
我正在尝试将属性传递给我的顶点着色器,但由于某种原因,它一直在第三个属性位置给我一个 -1,我要求 openGl 通过 glGetAttribLocation() 检索。目前它一直给我一个-1的tex
嘿,我尝试编写 OpenGL ES 2 引擎代码,但在创建着色器时,函数 glGetAttribLocation 返回 -1,这意味着 The named attribute variable is
这是我的着色器“triangles.vert”: #version 430 core layout(location = 0) in vec4 vPosition; layout(location =
这是顶点着色器 #version 450 in vec3 iPosition; in vec4 iColor; out vec4 oColor; uniform mat4 uMVP; void mai
我正在为 Android 编写一个 3D 应用程序,但是每当我调用 glGetAttribLocation() 时,我总是得到 -1。我很清楚 GLSL 编译器会删除我的着色器中未使用的变量,但据我所
我有这个代码: @Override public void onSurfaceCreated(GL10 gl, EGLConfig config) { GLES20.glClearColor(
我正在为 iOS 创建一个简单的 OpenGL ES 2.0 应用程序,每当我调用 glDrawArrays 时。我发现这是在我之前为我的两个属性(位置和颜色)调用 glEnableVertexAtt
我是一名优秀的程序员,十分优秀!