Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenshaders.c
Go to the documentation of this file.
00001 /* 00002 * Mesa 3-D graphics library 00003 * Version: 7.3 00004 * 00005 * Copyright (C) 2004-2008 Brian Paul All Rights Reserved. 00006 * 00007 * Permission is hereby granted, free of charge, to any person obtaining a 00008 * copy of this software and associated documentation files (the "Software"), 00009 * to deal in the Software without restriction, including without limitation 00010 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 00011 * and/or sell copies of the Software, and to permit persons to whom the 00012 * Software is furnished to do so, subject to the following conditions: 00013 * 00014 * The above copyright notice and this permission notice shall be included 00015 * in all copies or substantial portions of the Software. 00016 * 00017 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 00018 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 00019 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 00020 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 00021 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 00022 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 00023 */ 00024 00025 00026 #include "glheader.h" 00027 #include "context.h" 00028 #include "shaders.h" 00029 00030 00045 void GLAPIENTRY 00046 _mesa_AttachObjectARB(GLhandleARB program, GLhandleARB shader) 00047 { 00048 GET_CURRENT_CONTEXT(ctx); 00049 ctx->Driver.AttachShader(ctx, program, shader); 00050 } 00051 00052 00053 void GLAPIENTRY 00054 _mesa_AttachShader(GLuint program, GLuint shader) 00055 { 00056 GET_CURRENT_CONTEXT(ctx); 00057 ctx->Driver.AttachShader(ctx, program, shader); 00058 } 00059 00060 00061 void GLAPIENTRY 00062 _mesa_BindAttribLocationARB(GLhandleARB program, GLuint index, 00063 const GLcharARB *name) 00064 { 00065 GET_CURRENT_CONTEXT(ctx); 00066 ctx->Driver.BindAttribLocation(ctx, program, index, name); 00067 } 00068 00069 00070 void GLAPIENTRY 00071 _mesa_CompileShaderARB(GLhandleARB shaderObj) 00072 { 00073 GET_CURRENT_CONTEXT(ctx); 00074 ctx->Driver.CompileShader(ctx, shaderObj); 00075 } 00076 00077 00078 GLuint GLAPIENTRY 00079 _mesa_CreateShader(GLenum type) 00080 { 00081 GET_CURRENT_CONTEXT(ctx); 00082 return ctx->Driver.CreateShader(ctx, type); 00083 } 00084 00085 00086 GLhandleARB GLAPIENTRY 00087 _mesa_CreateShaderObjectARB(GLenum type) 00088 { 00089 GET_CURRENT_CONTEXT(ctx); 00090 return ctx->Driver.CreateShader(ctx, type); 00091 } 00092 00093 00094 GLuint GLAPIENTRY 00095 _mesa_CreateProgram(void) 00096 { 00097 GET_CURRENT_CONTEXT(ctx); 00098 return ctx->Driver.CreateProgram(ctx); 00099 } 00100 00101 00102 GLhandleARB GLAPIENTRY 00103 _mesa_CreateProgramObjectARB(void) 00104 { 00105 GET_CURRENT_CONTEXT(ctx); 00106 return ctx->Driver.CreateProgram(ctx); 00107 } 00108 00109 00110 void GLAPIENTRY 00111 _mesa_DeleteObjectARB(GLhandleARB obj) 00112 { 00113 if (obj) { 00114 GET_CURRENT_CONTEXT(ctx); 00115 if (ctx->Driver.IsProgram(ctx, obj)) { 00116 ctx->Driver.DeleteProgram2(ctx, obj); 00117 } 00118 else if (ctx->Driver.IsShader(ctx, obj)) { 00119 ctx->Driver.DeleteShader(ctx, obj); 00120 } 00121 else { 00122 /* error? */ 00123 } 00124 } 00125 } 00126 00127 00128 void GLAPIENTRY 00129 _mesa_DeleteProgram(GLuint name) 00130 { 00131 if (name) { 00132 GET_CURRENT_CONTEXT(ctx); 00133 ctx->Driver.DeleteProgram2(ctx, name); 00134 } 00135 } 00136 00137 00138 void GLAPIENTRY 00139 _mesa_DeleteShader(GLuint name) 00140 { 00141 if (name) { 00142 GET_CURRENT_CONTEXT(ctx); 00143 ctx->Driver.DeleteShader(ctx, name); 00144 } 00145 } 00146 00147 00148 void GLAPIENTRY 00149 _mesa_DetachObjectARB(GLhandleARB program, GLhandleARB shader) 00150 { 00151 GET_CURRENT_CONTEXT(ctx); 00152 ctx->Driver.DetachShader(ctx, program, shader); 00153 } 00154 00155 00156 void GLAPIENTRY 00157 _mesa_DetachShader(GLuint program, GLuint shader) 00158 { 00159 GET_CURRENT_CONTEXT(ctx); 00160 ctx->Driver.DetachShader(ctx, program, shader); 00161 } 00162 00163 00164 void GLAPIENTRY 00165 _mesa_GetActiveAttribARB(GLhandleARB program, GLuint index, 00166 GLsizei maxLength, GLsizei * length, GLint * size, 00167 GLenum * type, GLcharARB * name) 00168 { 00169 GET_CURRENT_CONTEXT(ctx); 00170 ctx->Driver.GetActiveAttrib(ctx, program, index, maxLength, length, size, 00171 type, name); 00172 } 00173 00174 00175 void GLAPIENTRY 00176 _mesa_GetActiveUniformARB(GLhandleARB program, GLuint index, 00177 GLsizei maxLength, GLsizei * length, GLint * size, 00178 GLenum * type, GLcharARB * name) 00179 { 00180 GET_CURRENT_CONTEXT(ctx); 00181 ctx->Driver.GetActiveUniform(ctx, program, index, maxLength, length, size, 00182 type, name); 00183 } 00184 00185 00186 void GLAPIENTRY 00187 _mesa_GetAttachedObjectsARB(GLhandleARB container, GLsizei maxCount, 00188 GLsizei * count, GLhandleARB * obj) 00189 { 00190 GET_CURRENT_CONTEXT(ctx); 00191 ctx->Driver.GetAttachedShaders(ctx, container, maxCount, count, obj); 00192 } 00193 00194 00195 void GLAPIENTRY 00196 _mesa_GetAttachedShaders(GLuint program, GLsizei maxCount, 00197 GLsizei *count, GLuint *obj) 00198 { 00199 GET_CURRENT_CONTEXT(ctx); 00200 ctx->Driver.GetAttachedShaders(ctx, program, maxCount, count, obj); 00201 } 00202 00203 00204 GLint GLAPIENTRY 00205 _mesa_GetAttribLocationARB(GLhandleARB program, const GLcharARB * name) 00206 { 00207 GET_CURRENT_CONTEXT(ctx); 00208 return ctx->Driver.GetAttribLocation(ctx, program, name); 00209 } 00210 00211 00212 void GLAPIENTRY 00213 _mesa_GetInfoLogARB(GLhandleARB object, GLsizei maxLength, GLsizei * length, 00214 GLcharARB * infoLog) 00215 { 00216 GET_CURRENT_CONTEXT(ctx); 00217 /* Implement in terms of GetProgramInfoLog, GetShaderInfoLog */ 00218 if (ctx->Driver.IsProgram(ctx, object)) { 00219 ctx->Driver.GetProgramInfoLog(ctx, object, maxLength, length, infoLog); 00220 } 00221 else if (ctx->Driver.IsShader(ctx, object)) { 00222 ctx->Driver.GetShaderInfoLog(ctx, object, maxLength, length, infoLog); 00223 } 00224 else { 00225 _mesa_error(ctx, GL_INVALID_OPERATION, "glGetInfoLogARB"); 00226 } 00227 } 00228 00229 00230 void GLAPIENTRY 00231 _mesa_GetObjectParameterivARB(GLhandleARB object, GLenum pname, GLint *params) 00232 { 00233 GET_CURRENT_CONTEXT(ctx); 00234 /* Implement in terms of GetProgramiv, GetShaderiv */ 00235 if (ctx->Driver.IsProgram(ctx, object)) { 00236 if (pname == GL_OBJECT_TYPE_ARB) { 00237 *params = GL_PROGRAM_OBJECT_ARB; 00238 } 00239 else { 00240 ctx->Driver.GetProgramiv(ctx, object, pname, params); 00241 } 00242 } 00243 else if (ctx->Driver.IsShader(ctx, object)) { 00244 if (pname == GL_OBJECT_TYPE_ARB) { 00245 *params = GL_SHADER_OBJECT_ARB; 00246 } 00247 else { 00248 ctx->Driver.GetShaderiv(ctx, object, pname, params); 00249 } 00250 } 00251 else { 00252 _mesa_error(ctx, GL_INVALID_VALUE, "glGetObjectParameterivARB"); 00253 } 00254 } 00255 00256 00257 void GLAPIENTRY 00258 _mesa_GetObjectParameterfvARB(GLhandleARB object, GLenum pname, 00259 GLfloat *params) 00260 { 00261 GLint iparams[1]; /* XXX is one element enough? */ 00262 _mesa_GetObjectParameterivARB(object, pname, iparams); 00263 params[0] = (GLfloat) iparams[0]; 00264 } 00265 00266 00267 void GLAPIENTRY 00268 _mesa_GetProgramiv(GLuint program, GLenum pname, GLint *params) 00269 { 00270 GET_CURRENT_CONTEXT(ctx); 00271 ctx->Driver.GetProgramiv(ctx, program, pname, params); 00272 } 00273 00274 00275 void GLAPIENTRY 00276 _mesa_GetShaderiv(GLuint shader, GLenum pname, GLint *params) 00277 { 00278 GET_CURRENT_CONTEXT(ctx); 00279 ctx->Driver.GetShaderiv(ctx, shader, pname, params); 00280 } 00281 00282 00283 void GLAPIENTRY 00284 _mesa_GetProgramInfoLog(GLuint program, GLsizei bufSize, 00285 GLsizei *length, GLchar *infoLog) 00286 { 00287 GET_CURRENT_CONTEXT(ctx); 00288 ctx->Driver.GetProgramInfoLog(ctx, program, bufSize, length, infoLog); 00289 } 00290 00291 00292 void GLAPIENTRY 00293 _mesa_GetShaderInfoLog(GLuint shader, GLsizei bufSize, 00294 GLsizei *length, GLchar *infoLog) 00295 { 00296 GET_CURRENT_CONTEXT(ctx); 00297 ctx->Driver.GetShaderInfoLog(ctx, shader, bufSize, length, infoLog); 00298 } 00299 00300 00301 void GLAPIENTRY 00302 _mesa_GetShaderSourceARB(GLhandleARB shader, GLsizei maxLength, 00303 GLsizei *length, GLcharARB *sourceOut) 00304 { 00305 GET_CURRENT_CONTEXT(ctx); 00306 ctx->Driver.GetShaderSource(ctx, shader, maxLength, length, sourceOut); 00307 } 00308 00309 00310 void GLAPIENTRY 00311 _mesa_GetUniformfvARB(GLhandleARB program, GLint location, GLfloat * params) 00312 { 00313 GET_CURRENT_CONTEXT(ctx); 00314 ctx->Driver.GetUniformfv(ctx, program, location, params); 00315 } 00316 00317 00318 void GLAPIENTRY 00319 _mesa_GetUniformivARB(GLhandleARB program, GLint location, GLint * params) 00320 { 00321 GET_CURRENT_CONTEXT(ctx); 00322 ctx->Driver.GetUniformiv(ctx, program, location, params); 00323 } 00324 00325 00326 00327 #if 0 00328 GLint GLAPIENTRY 00329 _mesa_GetUniformLocation(GLuint program, const GLcharARB *name) 00330 { 00331 GET_CURRENT_CONTEXT(ctx); 00332 return ctx->Driver.GetUniformLocation(ctx, program, name); 00333 } 00334 #endif 00335 00336 00337 GLhandleARB GLAPIENTRY 00338 _mesa_GetHandleARB(GLenum pname) 00339 { 00340 GET_CURRENT_CONTEXT(ctx); 00341 return ctx->Driver.GetHandle(ctx, pname); 00342 } 00343 00344 00345 GLint GLAPIENTRY 00346 _mesa_GetUniformLocationARB(GLhandleARB programObj, const GLcharARB *name) 00347 { 00348 GET_CURRENT_CONTEXT(ctx); 00349 return ctx->Driver.GetUniformLocation(ctx, programObj, name); 00350 } 00351 00352 00353 GLboolean GLAPIENTRY 00354 _mesa_IsProgram(GLuint name) 00355 { 00356 GET_CURRENT_CONTEXT(ctx); 00357 return ctx->Driver.IsProgram(ctx, name); 00358 } 00359 00360 00361 GLboolean GLAPIENTRY 00362 _mesa_IsShader(GLuint name) 00363 { 00364 GET_CURRENT_CONTEXT(ctx); 00365 return ctx->Driver.IsShader(ctx, name); 00366 } 00367 00368 00369 void GLAPIENTRY 00370 _mesa_LinkProgramARB(GLhandleARB programObj) 00371 { 00372 GET_CURRENT_CONTEXT(ctx); 00373 ctx->Driver.LinkProgram(ctx, programObj); 00374 } 00375 00376 00382 void GLAPIENTRY 00383 _mesa_ShaderSourceARB(GLhandleARB shaderObj, GLsizei count, 00384 const GLcharARB ** string, const GLint * length) 00385 { 00386 GET_CURRENT_CONTEXT(ctx); 00387 GLint *offsets; 00388 GLsizei i, totalLength; 00389 GLcharARB *source; 00390 00391 if (!shaderObj || string == NULL) { 00392 _mesa_error(ctx, GL_INVALID_VALUE, "glShaderSourceARB"); 00393 return; 00394 } 00395 00396 /* 00397 * This array holds offsets of where the appropriate string ends, thus the 00398 * last element will be set to the total length of the source code. 00399 */ 00400 offsets = (GLint *) _mesa_malloc(count * sizeof(GLint)); 00401 if (offsets == NULL) { 00402 _mesa_error(ctx, GL_OUT_OF_MEMORY, "glShaderSourceARB"); 00403 return; 00404 } 00405 00406 for (i = 0; i < count; i++) { 00407 if (string[i] == NULL) { 00408 _mesa_free((GLvoid *) offsets); 00409 _mesa_error(ctx, GL_INVALID_OPERATION, "glShaderSourceARB(null string)"); 00410 return; 00411 } 00412 if (length == NULL || length[i] < 0) 00413 offsets[i] = _mesa_strlen(string[i]); 00414 else 00415 offsets[i] = length[i]; 00416 /* accumulate string lengths */ 00417 if (i > 0) 00418 offsets[i] += offsets[i - 1]; 00419 } 00420 00421 /* Total length of source string is sum off all strings plus two. 00422 * One extra byte for terminating zero, another extra byte to silence 00423 * valgrind warnings in the parser/grammer code. 00424 */ 00425 totalLength = offsets[count - 1] + 2; 00426 source = (GLcharARB *) _mesa_malloc(totalLength * sizeof(GLcharARB)); 00427 if (source == NULL) { 00428 _mesa_free((GLvoid *) offsets); 00429 _mesa_error(ctx, GL_OUT_OF_MEMORY, "glShaderSourceARB"); 00430 return; 00431 } 00432 00433 for (i = 0; i < count; i++) { 00434 GLint start = (i > 0) ? offsets[i - 1] : 0; 00435 _mesa_memcpy(source + start, string[i], 00436 (offsets[i] - start) * sizeof(GLcharARB)); 00437 } 00438 source[totalLength - 1] = '\0'; 00439 source[totalLength - 2] = '\0'; 00440 00441 ctx->Driver.ShaderSource(ctx, shaderObj, source); 00442 00443 _mesa_free(offsets); 00444 } 00445 00446 00447 void GLAPIENTRY 00448 _mesa_Uniform1fARB(GLint location, GLfloat v0) 00449 { 00450 GET_CURRENT_CONTEXT(ctx); 00451 ctx->Driver.Uniform(ctx, location, 1, &v0, GL_FLOAT); 00452 } 00453 00454 void GLAPIENTRY 00455 _mesa_Uniform2fARB(GLint location, GLfloat v0, GLfloat v1) 00456 { 00457 GET_CURRENT_CONTEXT(ctx); 00458 GLfloat v[2]; 00459 v[0] = v0; 00460 v[1] = v1; 00461 ctx->Driver.Uniform(ctx, location, 1, v, GL_FLOAT_VEC2); 00462 } 00463 00464 void GLAPIENTRY 00465 _mesa_Uniform3fARB(GLint location, GLfloat v0, GLfloat v1, GLfloat v2) 00466 { 00467 GET_CURRENT_CONTEXT(ctx); 00468 GLfloat v[3]; 00469 v[0] = v0; 00470 v[1] = v1; 00471 v[2] = v2; 00472 ctx->Driver.Uniform(ctx, location, 1, v, GL_FLOAT_VEC3); 00473 } 00474 00475 void GLAPIENTRY 00476 _mesa_Uniform4fARB(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, 00477 GLfloat v3) 00478 { 00479 GET_CURRENT_CONTEXT(ctx); 00480 GLfloat v[4]; 00481 v[0] = v0; 00482 v[1] = v1; 00483 v[2] = v2; 00484 v[3] = v3; 00485 ctx->Driver.Uniform(ctx, location, 1, v, GL_FLOAT_VEC4); 00486 } 00487 00488 void GLAPIENTRY 00489 _mesa_Uniform1iARB(GLint location, GLint v0) 00490 { 00491 GET_CURRENT_CONTEXT(ctx); 00492 ctx->Driver.Uniform(ctx, location, 1, &v0, GL_INT); 00493 } 00494 00495 void GLAPIENTRY 00496 _mesa_Uniform2iARB(GLint location, GLint v0, GLint v1) 00497 { 00498 GET_CURRENT_CONTEXT(ctx); 00499 GLint v[2]; 00500 v[0] = v0; 00501 v[1] = v1; 00502 ctx->Driver.Uniform(ctx, location, 1, v, GL_INT_VEC2); 00503 } 00504 00505 void GLAPIENTRY 00506 _mesa_Uniform3iARB(GLint location, GLint v0, GLint v1, GLint v2) 00507 { 00508 GET_CURRENT_CONTEXT(ctx); 00509 GLint v[3]; 00510 v[0] = v0; 00511 v[1] = v1; 00512 v[2] = v2; 00513 ctx->Driver.Uniform(ctx, location, 1, v, GL_INT_VEC3); 00514 } 00515 00516 void GLAPIENTRY 00517 _mesa_Uniform4iARB(GLint location, GLint v0, GLint v1, GLint v2, GLint v3) 00518 { 00519 GET_CURRENT_CONTEXT(ctx); 00520 GLint v[4]; 00521 v[0] = v0; 00522 v[1] = v1; 00523 v[2] = v2; 00524 v[3] = v3; 00525 ctx->Driver.Uniform(ctx, location, 1, v, GL_INT_VEC4); 00526 } 00527 00528 void GLAPIENTRY 00529 _mesa_Uniform1fvARB(GLint location, GLsizei count, const GLfloat * value) 00530 { 00531 GET_CURRENT_CONTEXT(ctx); 00532 ctx->Driver.Uniform(ctx, location, count, value, GL_FLOAT); 00533 } 00534 00535 void GLAPIENTRY 00536 _mesa_Uniform2fvARB(GLint location, GLsizei count, const GLfloat * value) 00537 { 00538 GET_CURRENT_CONTEXT(ctx); 00539 ctx->Driver.Uniform(ctx, location, count, value, GL_FLOAT_VEC2); 00540 } 00541 00542 void GLAPIENTRY 00543 _mesa_Uniform3fvARB(GLint location, GLsizei count, const GLfloat * value) 00544 { 00545 GET_CURRENT_CONTEXT(ctx); 00546 ctx->Driver.Uniform(ctx, location, count, value, GL_FLOAT_VEC3); 00547 } 00548 00549 void GLAPIENTRY 00550 _mesa_Uniform4fvARB(GLint location, GLsizei count, const GLfloat * value) 00551 { 00552 GET_CURRENT_CONTEXT(ctx); 00553 ctx->Driver.Uniform(ctx, location, count, value, GL_FLOAT_VEC4); 00554 } 00555 00556 void GLAPIENTRY 00557 _mesa_Uniform1ivARB(GLint location, GLsizei count, const GLint * value) 00558 { 00559 GET_CURRENT_CONTEXT(ctx); 00560 ctx->Driver.Uniform(ctx, location, count, value, GL_INT); 00561 } 00562 00563 void GLAPIENTRY 00564 _mesa_Uniform2ivARB(GLint location, GLsizei count, const GLint * value) 00565 { 00566 GET_CURRENT_CONTEXT(ctx); 00567 ctx->Driver.Uniform(ctx, location, count, value, GL_INT_VEC2); 00568 } 00569 00570 void GLAPIENTRY 00571 _mesa_Uniform3ivARB(GLint location, GLsizei count, const GLint * value) 00572 { 00573 GET_CURRENT_CONTEXT(ctx); 00574 ctx->Driver.Uniform(ctx, location, count, value, GL_INT_VEC3); 00575 } 00576 00577 void GLAPIENTRY 00578 _mesa_Uniform4ivARB(GLint location, GLsizei count, const GLint * value) 00579 { 00580 GET_CURRENT_CONTEXT(ctx); 00581 ctx->Driver.Uniform(ctx, location, count, value, GL_INT_VEC4); 00582 } 00583 00584 00585 void GLAPIENTRY 00586 _mesa_UniformMatrix2fvARB(GLint location, GLsizei count, GLboolean transpose, 00587 const GLfloat * value) 00588 { 00589 GET_CURRENT_CONTEXT(ctx); 00590 ctx->Driver.UniformMatrix(ctx, 2, 2, GL_FLOAT_MAT2, 00591 location, count, transpose, value); 00592 } 00593 00594 void GLAPIENTRY 00595 _mesa_UniformMatrix3fvARB(GLint location, GLsizei count, GLboolean transpose, 00596 const GLfloat * value) 00597 { 00598 GET_CURRENT_CONTEXT(ctx); 00599 ctx->Driver.UniformMatrix(ctx, 3, 3, GL_FLOAT_MAT3, 00600 location, count, transpose, value); 00601 } 00602 00603 void GLAPIENTRY 00604 _mesa_UniformMatrix4fvARB(GLint location, GLsizei count, GLboolean transpose, 00605 const GLfloat * value) 00606 { 00607 GET_CURRENT_CONTEXT(ctx); 00608 ctx->Driver.UniformMatrix(ctx, 4, 4, GL_FLOAT_MAT4, 00609 location, count, transpose, value); 00610 } 00611 00612 00616 void GLAPIENTRY 00617 _mesa_UniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, 00618 const GLfloat *value) 00619 { 00620 GET_CURRENT_CONTEXT(ctx); 00621 ctx->Driver.UniformMatrix(ctx, 2, 3, GL_FLOAT_MAT2x3, 00622 location, count, transpose, value); 00623 } 00624 00625 void GLAPIENTRY 00626 _mesa_UniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, 00627 const GLfloat *value) 00628 { 00629 GET_CURRENT_CONTEXT(ctx); 00630 ctx->Driver.UniformMatrix(ctx, 3, 2, GL_FLOAT_MAT3x2, 00631 location, count, transpose, value); 00632 } 00633 00634 void GLAPIENTRY 00635 _mesa_UniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, 00636 const GLfloat *value) 00637 { 00638 GET_CURRENT_CONTEXT(ctx); 00639 ctx->Driver.UniformMatrix(ctx, 2, 4, GL_FLOAT_MAT2x4, 00640 location, count, transpose, value); 00641 } 00642 00643 void GLAPIENTRY 00644 _mesa_UniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, 00645 const GLfloat *value) 00646 { 00647 GET_CURRENT_CONTEXT(ctx); 00648 ctx->Driver.UniformMatrix(ctx, 4, 2, GL_FLOAT_MAT4x2, 00649 location, count, transpose, value); 00650 } 00651 00652 void GLAPIENTRY 00653 _mesa_UniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, 00654 const GLfloat *value) 00655 { 00656 GET_CURRENT_CONTEXT(ctx); 00657 ctx->Driver.UniformMatrix(ctx, 3, 4, GL_FLOAT_MAT3x4, 00658 location, count, transpose, value); 00659 } 00660 00661 void GLAPIENTRY 00662 _mesa_UniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, 00663 const GLfloat *value) 00664 { 00665 GET_CURRENT_CONTEXT(ctx); 00666 ctx->Driver.UniformMatrix(ctx, 4, 3, GL_FLOAT_MAT4x3, 00667 location, count, transpose, value); 00668 } 00669 00670 00671 void GLAPIENTRY 00672 _mesa_UseProgramObjectARB(GLhandleARB program) 00673 { 00674 GET_CURRENT_CONTEXT(ctx); 00675 FLUSH_VERTICES(ctx, _NEW_PROGRAM); 00676 ctx->Driver.UseProgram(ctx, program); 00677 } 00678 00679 00680 void GLAPIENTRY 00681 _mesa_ValidateProgramARB(GLhandleARB program) 00682 { 00683 GET_CURRENT_CONTEXT(ctx); 00684 ctx->Driver.ValidateProgram(ctx, program); 00685 } 00686 Generated on Sat May 26 2012 04:19:10 for ReactOS by
1.7.6.1
|