glGetShaderiv — return 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.
glGetShaderiv
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, 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
For implementations that support a shader compiler,
params
returns
GL_TRUE
if the last compile
operation on shader
was
successful, and GL_FALSE
otherwise.
GL_INFO_LOG_LENGTH
For implementations that support a shader compiler,
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
For implementations that support a shader compiler,
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.
Shader compiler support is optional, and thus must be queried
before use by calling glGet
with argument GL_SHADER_COMPILER
. glShaderSource,
glCompileShader,
glGetShaderPrecisionFormat, and
glReleaseShaderCompiler will
each generate GL_INVALID_OPERATION
on implementations
that do not support a shader compiler, as will glGetShaderiv
queries of
GL_COMPILE_STATUS
, GL_INFO_LOG_LENGTH
, and
GL_SHADER_SOURCE_LENGTH
. Such implementations instead offer the
glShaderBinary
alternative for supplying a pre-compiled shader binary.
If an error is generated, no change is made to the
contents of params
.
GL_INVALID_ENUM
is generated if
pname
is not an accepted value.
GL_INVALID_VALUE
is generated if
shader
is not a value generated by
OpenGL.
GL_INVALID_OPERATION
is generated if
pname
is GL_COMPILE_STATUS
,
GL_INFO_LOG_LENGTH
, or GL_SHADER_SOURCE_LENGTH
but a shader compiler is not supported.
GL_INVALID_OPERATION
is generated if
shader
does not refer to a shader
object.
glGet
with argument GL_SHADER_COMPILER
glGetShaderInfoLog
with argument shader
glGetShaderSource
with argument shader
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 }
glCompileShader, glCreateShader, glDeleteShader, glGetProgramiv, glShaderSource, glShaderBinary
Copyright © 2003-2005 3Dlabs Inc. Ltd. 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/.