glGetShaderiv — Returns a parameter from a shader object
void glGetShaderiv( | GLuint shader, |
GLenum pname, | |
GLint *params) ; |
shader
Specifies the shader object to be queried.
pname
Specifies the object parameter. Accepted symbolic names are GL_SHADER_TYPE
, GL_DELETE_STATUS
, GL_COMPILE_STATUS
, GL_INFO_LOG_LENGTH
, GL_SHADER_SOURCE_LENGTH
.
params
Returns the requested object parameter.
glGetShader
returns in params
the value of a parameter for a specific shader object. The following parameters are defined:
GL_SHADER_TYPE
params
returns GL_VERTEX_SHADER
if shader
is a vertex shader object, GL_GEOMETRY_SHADER
if shader
is a geometry shader object, and GL_FRAGMENT_SHADER
if shader
is a fragment shader object.
GL_DELETE_STATUS
params
returns GL_TRUE
if shader
is currently flagged for deletion, and GL_FALSE
otherwise.
GL_COMPILE_STATUS
params
returns GL_TRUE
if the last compile operation on shader
was successful, and GL_FALSE
otherwise.
GL_INFO_LOG_LENGTH
params
returns the number of characters in the information log for shader
including the null termination character (i.e., the size of the character buffer required to store the information log). If shader
has no information log, a value of 0 is returned.
GL_SHADER_SOURCE_LENGTH
params
returns the length of the concatenation of the source strings that make up the shader source for the shader
, including the null termination character. (i.e., the size of the character buffer required to store the shader source). If no source code exists, 0 is returned.
If an error is generated, no change is made to the contents of params
.
GL_INVALID_VALUE
is generated if shader
is not a value generated by OpenGL.
GL_INVALID_OPERATION
is generated if shader
does not refer to a shader object.
GL_INVALID_ENUM
is generated if pname
is not an accepted value.
GLuint vshader = glCreateShader(GL_VERTEX_SHADER); glShaderSource(vshader, 1, &vertex_shader_source, NULL); // vertex_shader_source is a GLchar* containing glsl shader source code glCompileShader(vshader); GLint vertex_compiled; glGetShaderiv(vshader, GL_COMPILE_STATUS, &vertex_compiled); if (vertex_compiled != GL_TRUE) { GLsizei log_length = 0; GLchar message[1024]; glGetShaderInfoLog(vshader, 1024, &log_length, message); // Write the error to a log } GLuint fshader = glCreateShader(GL_FRAGMENT_SHADER); glShaderSource(fshader, 1, &fragment_shader_source, NULL); // fragment_shader_source is a GLchar* containing glsl shader source code glCompileShader(fshader); GLint fragment_compiled; glGetShaderiv(fshader, GL_COMPILE_STATUS, &fragment_compiled); if (fragment_compiled != GL_TRUE) { GLsizei log_length = 0; GLchar message[1024]; glGetShaderInfoLog(fshader, 1024, &log_length, message); // Write the error to a log } GLuint program = glCreateProgram(); // This step is unnecessary if you use the location specifier in your shader // e.g. layout (location = 0) in vec3 position; glBindAttribLocation(program, 0, "position"); // The index passed into glBindAttribLocation is glBindAttribLocation(program, 1, "texcoord"); // used by glEnableVertexAttribArray. "position" glBindAttribLocation(program, 2, "normal"); // "texcoord" "normal" and "color" are the names of the glBindAttribLocation(program, 3, "color"); // respective inputs in your fragment shader. glAttachShader(program, vshader); glAttachShader(program, fshader); glLinkProgram(program); GLint program_linked; glGetProgramiv(program, GL_LINK_STATUS, &program_linked); if (program_linked != GL_TRUE) { GLsizei log_length = 0; GLchar message[1024]; glGetProgramInfoLog(program, 1024, &log_length, message); // Write the error to a log }
Anton Gerdelan - OpenGL 4 Shaders
open.gl - The Graphics Pipeline
opengl-tutorial.org - Tutorial 2 : The first triangle
OpenGL Version | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Function / Feature Name | 2.0 | 2.1 | 3.0 | 3.1 | 3.2 | 3.3 | 4.0 | 4.1 | 4.2 | 4.3 | 4.4 | 4.5 |
glGetShaderiv | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
Copyright © 2003-2005 3Dlabs Inc. Ltd. Copyright © 2010-2014 Khronos Group. This material may be distributed subject to the terms and conditions set forth in the Open Publication License, v 1.0, 8 June 1999. https://opencontent.org/openpub/.