blob: 5ab5cebab5fdb3b14ffa50bcb567d47c7e0502f8 [file] [log] [blame]
Nicolas Capens264f1522015-01-09 17:21:17 -05001// SwiftShader Software Renderer
2//
3// Copyright(c) 2005-2013 TransGaming Inc.
4//
5// All rights reserved. No part of this software may be copied, distributed, transmitted,
6// transcribed, stored in a retrieval system, translated into any human or computer
7// language by any means, or disclosed to third parties without the explicit written
8// agreement of TransGaming Inc. Without such an agreement, no rights or licenses, express
9// or implied, including but not limited to any patent rights, are granted to you.
10//
Nicolas Capens79eef882015-01-09 17:38:27 -050011// libGL.cpp: Implements the exported OpenGL functions.
Nicolas Capens264f1522015-01-09 17:21:17 -050012
13#include "main.h"
14#include "mathutil.h"
15#include "utilities.h"
16#include "Buffer.h"
17#include "Context.h"
18#include "Fence.h"
19#include "Framebuffer.h"
20#include "Program.h"
21#include "Renderbuffer.h"
22#include "Shader.h"
23#include "Texture.h"
24#include "Query.h"
25#include "common/debug.h"
26#include "Common/Version.h"
27#include "Main/Register.hpp"
28
Nicolas Capensa9b49372015-01-30 00:33:26 -050029#define _GDI32_
30#include <windows.h>
31#include <GL/GL.h>
Nicolas Capensa9b49372015-01-30 00:33:26 -050032#include <GL/glext.h>
Nicolas Capens264f1522015-01-09 17:21:17 -050033
Nicolas Capens264f1522015-01-09 17:21:17 -050034#include <limits>
35
36static bool validImageSize(GLint level, GLsizei width, GLsizei height)
37{
Nicolas Capensf4486fd2015-01-22 11:10:37 -050038 if(level < 0 || level >= gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS || width < 0 || height < 0)
Nicolas Capens264f1522015-01-09 17:21:17 -050039 {
40 return false;
41 }
42
43 return true;
44}
45
Nicolas Capensf4486fd2015-01-22 11:10:37 -050046static bool validateSubImageParams(bool compressed, GLsizei width, GLsizei height, GLint xoffset, GLint yoffset, GLenum target, GLint level, GLenum format, gl::Texture *texture)
Nicolas Capens264f1522015-01-09 17:21:17 -050047{
48 if(!texture)
49 {
50 return error(GL_INVALID_OPERATION, false);
51 }
52
53 if(compressed != texture->isCompressed(target, level))
54 {
55 return error(GL_INVALID_OPERATION, false);
56 }
57
Maxime Grégoire5e582162015-07-16 12:52:57 -040058 if(format != GL_NONE && format != texture->getFormat(target, level) && target != GL_TEXTURE_1D)
Nicolas Capens264f1522015-01-09 17:21:17 -050059 {
60 return error(GL_INVALID_OPERATION, false);
61 }
62
63 if(compressed)
64 {
65 if((width % 4 != 0 && width != texture->getWidth(target, 0)) ||
66 (height % 4 != 0 && height != texture->getHeight(target, 0)))
67 {
68 return error(GL_INVALID_OPERATION, false);
69 }
70 }
71
72 if(xoffset + width > texture->getWidth(target, level) ||
73 yoffset + height > texture->getHeight(target, level))
74 {
75 return error(GL_INVALID_VALUE, false);
76 }
77
78 return true;
79}
80
81// Check for combinations of format and type that are valid for ReadPixels
82static bool validReadFormatType(GLenum format, GLenum type)
83{
84 switch(format)
85 {
86 case GL_RGBA:
87 switch(type)
88 {
89 case GL_UNSIGNED_BYTE:
90 break;
91 default:
92 return false;
93 }
94 break;
95 case GL_BGRA_EXT:
96 switch(type)
97 {
98 case GL_UNSIGNED_BYTE:
Nicolas Capensa9b49372015-01-30 00:33:26 -050099 case GL_UNSIGNED_SHORT_4_4_4_4_REV:
100 case GL_UNSIGNED_SHORT_1_5_5_5_REV:
Nicolas Capens264f1522015-01-09 17:21:17 -0500101 break;
102 default:
103 return false;
104 }
105 break;
Nicolas Capensf4486fd2015-01-22 11:10:37 -0500106 case gl::IMPLEMENTATION_COLOR_READ_FORMAT:
Nicolas Capens264f1522015-01-09 17:21:17 -0500107 switch(type)
108 {
Nicolas Capensf4486fd2015-01-22 11:10:37 -0500109 case gl::IMPLEMENTATION_COLOR_READ_TYPE:
Nicolas Capens264f1522015-01-09 17:21:17 -0500110 break;
111 default:
112 return false;
113 }
114 break;
115 default:
116 return false;
117 }
118
119 return true;
120}
121
122extern "C"
123{
124
Nicolas Capensa9b49372015-01-30 00:33:26 -0500125void APIENTRY glActiveTexture(GLenum texture)
Nicolas Capens264f1522015-01-09 17:21:17 -0500126{
127 TRACE("(GLenum texture = 0x%X)", texture);
128
Nicolas Capensf4486fd2015-01-22 11:10:37 -0500129 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -0500130
131 if(context)
132 {
Nicolas Capensa9b49372015-01-30 00:33:26 -0500133 if(context->getListIndex() != 0)
134 {
135 UNIMPLEMENTED();
136 }
137
Nicolas Capensf4486fd2015-01-22 11:10:37 -0500138 if(texture < GL_TEXTURE0 || texture > GL_TEXTURE0 + gl::MAX_COMBINED_TEXTURE_IMAGE_UNITS - 1)
Nicolas Capens264f1522015-01-09 17:21:17 -0500139 {
140 return error(GL_INVALID_ENUM);
141 }
142
143 context->setActiveSampler(texture - GL_TEXTURE0);
144 }
145}
146
Nicolas Capensa9b49372015-01-30 00:33:26 -0500147void APIENTRY glAttachShader(GLuint program, GLuint shader)
Nicolas Capens264f1522015-01-09 17:21:17 -0500148{
149 TRACE("(GLuint program = %d, GLuint shader = %d)", program, shader);
150
Nicolas Capensf4486fd2015-01-22 11:10:37 -0500151 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -0500152
153 if(context)
154 {
Nicolas Capensf4486fd2015-01-22 11:10:37 -0500155 gl::Program *programObject = context->getProgram(program);
156 gl::Shader *shaderObject = context->getShader(shader);
Nicolas Capens264f1522015-01-09 17:21:17 -0500157
158 if(!programObject)
159 {
160 if(context->getShader(program))
161 {
162 return error(GL_INVALID_OPERATION);
163 }
164 else
165 {
166 return error(GL_INVALID_VALUE);
167 }
168 }
169
170 if(!shaderObject)
171 {
172 if(context->getProgram(shader))
173 {
174 return error(GL_INVALID_OPERATION);
175 }
176 else
177 {
178 return error(GL_INVALID_VALUE);
179 }
180 }
181
182 if(!programObject->attachShader(shaderObject))
183 {
184 return error(GL_INVALID_OPERATION);
185 }
186 }
187}
188
Nicolas Capensa9b49372015-01-30 00:33:26 -0500189void APIENTRY glBeginQueryEXT(GLenum target, GLuint name)
Nicolas Capens264f1522015-01-09 17:21:17 -0500190{
Nicolas Capens7cc75e12015-01-29 14:44:24 -0500191 TRACE("(GLenum target = 0x%X, GLuint name = %d)", target, name);
Nicolas Capens264f1522015-01-09 17:21:17 -0500192
193 switch(target)
194 {
Nicolas Capensa9b49372015-01-30 00:33:26 -0500195 case GL_ANY_SAMPLES_PASSED:
196 case GL_ANY_SAMPLES_PASSED_CONSERVATIVE:
Nicolas Capens264f1522015-01-09 17:21:17 -0500197 break;
198 default:
199 return error(GL_INVALID_ENUM);
200 }
201
Nicolas Capens7cc75e12015-01-29 14:44:24 -0500202 if(name == 0)
Nicolas Capens264f1522015-01-09 17:21:17 -0500203 {
204 return error(GL_INVALID_OPERATION);
205 }
206
Nicolas Capensf4486fd2015-01-22 11:10:37 -0500207 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -0500208
209 if(context)
210 {
Nicolas Capensa9b49372015-01-30 00:33:26 -0500211 if(context->getListIndex() != 0)
212 {
213 UNIMPLEMENTED();
214 }
215
Nicolas Capens7cc75e12015-01-29 14:44:24 -0500216 context->beginQuery(target, name);
Nicolas Capens264f1522015-01-09 17:21:17 -0500217 }
218}
219
Nicolas Capensa9b49372015-01-30 00:33:26 -0500220void APIENTRY glBindAttribLocation(GLuint program, GLuint index, const GLchar* name)
Nicolas Capens264f1522015-01-09 17:21:17 -0500221{
222 TRACE("(GLuint program = %d, GLuint index = %d, const GLchar* name = %s)", program, index, name);
223
Nicolas Capensf4486fd2015-01-22 11:10:37 -0500224 if(index >= gl::MAX_VERTEX_ATTRIBS)
Nicolas Capens264f1522015-01-09 17:21:17 -0500225 {
226 return error(GL_INVALID_VALUE);
227 }
228
Nicolas Capensf4486fd2015-01-22 11:10:37 -0500229 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -0500230
231 if(context)
232 {
Nicolas Capensf4486fd2015-01-22 11:10:37 -0500233 gl::Program *programObject = context->getProgram(program);
Nicolas Capens264f1522015-01-09 17:21:17 -0500234
235 if(!programObject)
236 {
237 if(context->getShader(program))
238 {
239 return error(GL_INVALID_OPERATION);
240 }
241 else
242 {
243 return error(GL_INVALID_VALUE);
244 }
245 }
246
247 if(strncmp(name, "gl_", 3) == 0)
248 {
249 return error(GL_INVALID_OPERATION);
250 }
251
252 programObject->bindAttributeLocation(index, name);
253 }
254}
255
Nicolas Capensa9b49372015-01-30 00:33:26 -0500256void APIENTRY glBindBuffer(GLenum target, GLuint buffer)
Nicolas Capens264f1522015-01-09 17:21:17 -0500257{
258 TRACE("(GLenum target = 0x%X, GLuint buffer = %d)", target, buffer);
259
Nicolas Capensf4486fd2015-01-22 11:10:37 -0500260 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -0500261
262 if(context)
263 {
264 switch(target)
265 {
266 case GL_ARRAY_BUFFER:
267 context->bindArrayBuffer(buffer);
268 return;
269 case GL_ELEMENT_ARRAY_BUFFER:
270 context->bindElementArrayBuffer(buffer);
271 return;
272 default:
273 return error(GL_INVALID_ENUM);
274 }
275 }
276}
277
Nicolas Capensa9b49372015-01-30 00:33:26 -0500278void APIENTRY glBindFramebuffer(GLenum target, GLuint framebuffer)
Nicolas Capens264f1522015-01-09 17:21:17 -0500279{
280 TRACE("(GLenum target = 0x%X, GLuint framebuffer = %d)", target, framebuffer);
281
Nicolas Capensa9b49372015-01-30 00:33:26 -0500282 if(target != GL_FRAMEBUFFER && target != GL_DRAW_FRAMEBUFFER_EXT && target != GL_READ_FRAMEBUFFER_EXT)
Nicolas Capens264f1522015-01-09 17:21:17 -0500283 {
284 return error(GL_INVALID_ENUM);
285 }
286
Nicolas Capensf4486fd2015-01-22 11:10:37 -0500287 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -0500288
289 if(context)
290 {
Nicolas Capensa9b49372015-01-30 00:33:26 -0500291 if(context->getListIndex() != 0)
292 {
293 UNIMPLEMENTED();
294 }
295
296 if(target == GL_READ_FRAMEBUFFER_EXT || target == GL_FRAMEBUFFER)
Nicolas Capens264f1522015-01-09 17:21:17 -0500297 {
298 context->bindReadFramebuffer(framebuffer);
299 }
Nicolas Capensa9b49372015-01-30 00:33:26 -0500300
301 if(target == GL_DRAW_FRAMEBUFFER_EXT || target == GL_FRAMEBUFFER)
Nicolas Capens264f1522015-01-09 17:21:17 -0500302 {
303 context->bindDrawFramebuffer(framebuffer);
304 }
305 }
306}
307
Nicolas Capensa9b49372015-01-30 00:33:26 -0500308void APIENTRY glBindRenderbuffer(GLenum target, GLuint renderbuffer)
Nicolas Capens264f1522015-01-09 17:21:17 -0500309{
310 TRACE("(GLenum target = 0x%X, GLuint renderbuffer = %d)", target, renderbuffer);
311
312 if(target != GL_RENDERBUFFER)
313 {
314 return error(GL_INVALID_ENUM);
315 }
316
Nicolas Capensf4486fd2015-01-22 11:10:37 -0500317 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -0500318
319 if(context)
320 {
Nicolas Capensa9b49372015-01-30 00:33:26 -0500321 if(context->getListIndex() != 0)
Nicolas Capens264f1522015-01-09 17:21:17 -0500322 {
Nicolas Capensa9b49372015-01-30 00:33:26 -0500323 UNIMPLEMENTED();
Nicolas Capens264f1522015-01-09 17:21:17 -0500324 }
325
326 context->bindRenderbuffer(renderbuffer);
327 }
328}
329
Nicolas Capensa9b49372015-01-30 00:33:26 -0500330void APIENTRY glBindTexture(GLenum target, GLuint texture)
Nicolas Capens264f1522015-01-09 17:21:17 -0500331{
332 TRACE("(GLenum target = 0x%X, GLuint texture = %d)", target, texture);
333
Nicolas Capensf4486fd2015-01-22 11:10:37 -0500334 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -0500335
336 if(context)
337 {
Nicolas Capensa9b49372015-01-30 00:33:26 -0500338 if(context->getListIndex() != 0)
339 {
340 UNIMPLEMENTED();
341 }
342
Nicolas Capensf4486fd2015-01-22 11:10:37 -0500343 gl::Texture *textureObject = context->getTexture(texture);
Nicolas Capens264f1522015-01-09 17:21:17 -0500344
345 if(textureObject && textureObject->getTarget() != target && texture != 0)
346 {
347 return error(GL_INVALID_OPERATION);
348 }
349
350 switch(target)
351 {
Maxime Grégoire5e582162015-07-16 12:52:57 -0400352 case GL_TEXTURE_1D:
353 context->bindTexture1D(texture);
354 return;
Nicolas Capens264f1522015-01-09 17:21:17 -0500355 case GL_TEXTURE_2D:
356 context->bindTexture2D(texture);
357 return;
358 case GL_TEXTURE_CUBE_MAP:
359 context->bindTextureCubeMap(texture);
360 return;
Nicolas Capens264f1522015-01-09 17:21:17 -0500361 default:
362 return error(GL_INVALID_ENUM);
363 }
364 }
365}
366
Nicolas Capensa9b49372015-01-30 00:33:26 -0500367void APIENTRY glBlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
Nicolas Capens264f1522015-01-09 17:21:17 -0500368{
369 TRACE("(GLclampf red = %f, GLclampf green = %f, GLclampf blue = %f, GLclampf alpha = %f)",
Nicolas Capensa9b49372015-01-30 00:33:26 -0500370 red, green, blue, alpha);
Nicolas Capens264f1522015-01-09 17:21:17 -0500371
Nicolas Capensf4486fd2015-01-22 11:10:37 -0500372 gl::Context* context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -0500373
374 if(context)
375 {
Nicolas Capensa9b49372015-01-30 00:33:26 -0500376 if(context->getListIndex() != 0)
377 {
378 UNIMPLEMENTED();
379 }
380
Nicolas Capensf4486fd2015-01-22 11:10:37 -0500381 context->setBlendColor(gl::clamp01(red), gl::clamp01(green), gl::clamp01(blue), gl::clamp01(alpha));
Nicolas Capens264f1522015-01-09 17:21:17 -0500382 }
383}
384
Nicolas Capensa9b49372015-01-30 00:33:26 -0500385void APIENTRY glBlendEquation(GLenum mode)
Nicolas Capens264f1522015-01-09 17:21:17 -0500386{
387 glBlendEquationSeparate(mode, mode);
388}
389
Nicolas Capensa9b49372015-01-30 00:33:26 -0500390void APIENTRY glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha)
Nicolas Capens264f1522015-01-09 17:21:17 -0500391{
392 TRACE("(GLenum modeRGB = 0x%X, GLenum modeAlpha = 0x%X)", modeRGB, modeAlpha);
393
394 switch(modeRGB)
395 {
396 case GL_FUNC_ADD:
397 case GL_FUNC_SUBTRACT:
398 case GL_FUNC_REVERSE_SUBTRACT:
399 case GL_MIN_EXT:
400 case GL_MAX_EXT:
401 break;
402 default:
403 return error(GL_INVALID_ENUM);
404 }
405
406 switch(modeAlpha)
407 {
408 case GL_FUNC_ADD:
409 case GL_FUNC_SUBTRACT:
410 case GL_FUNC_REVERSE_SUBTRACT:
411 case GL_MIN_EXT:
412 case GL_MAX_EXT:
413 break;
414 default:
415 return error(GL_INVALID_ENUM);
416 }
417
Nicolas Capensf4486fd2015-01-22 11:10:37 -0500418 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -0500419
420 if(context)
421 {
Nicolas Capensa9b49372015-01-30 00:33:26 -0500422 if(context->getListIndex() != 0)
423 {
424 UNIMPLEMENTED();
425 }
426
Nicolas Capens264f1522015-01-09 17:21:17 -0500427 context->setBlendEquation(modeRGB, modeAlpha);
428 }
429}
430
Nicolas Capensa9b49372015-01-30 00:33:26 -0500431void APIENTRY glBlendFunc(GLenum sfactor, GLenum dfactor)
Nicolas Capens264f1522015-01-09 17:21:17 -0500432{
433 glBlendFuncSeparate(sfactor, dfactor, sfactor, dfactor);
434}
435
Nicolas Capensa9b49372015-01-30 00:33:26 -0500436void APIENTRY glBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
Nicolas Capens264f1522015-01-09 17:21:17 -0500437{
438 TRACE("(GLenum srcRGB = 0x%X, GLenum dstRGB = 0x%X, GLenum srcAlpha = 0x%X, GLenum dstAlpha = 0x%X)",
439 srcRGB, dstRGB, srcAlpha, dstAlpha);
440
441 switch(srcRGB)
442 {
443 case GL_ZERO:
444 case GL_ONE:
445 case GL_SRC_COLOR:
446 case GL_ONE_MINUS_SRC_COLOR:
447 case GL_DST_COLOR:
448 case GL_ONE_MINUS_DST_COLOR:
449 case GL_SRC_ALPHA:
450 case GL_ONE_MINUS_SRC_ALPHA:
451 case GL_DST_ALPHA:
452 case GL_ONE_MINUS_DST_ALPHA:
453 case GL_CONSTANT_COLOR:
454 case GL_ONE_MINUS_CONSTANT_COLOR:
455 case GL_CONSTANT_ALPHA:
456 case GL_ONE_MINUS_CONSTANT_ALPHA:
457 case GL_SRC_ALPHA_SATURATE:
458 break;
459 default:
460 return error(GL_INVALID_ENUM);
461 }
462
463 switch(dstRGB)
464 {
465 case GL_ZERO:
466 case GL_ONE:
467 case GL_SRC_COLOR:
468 case GL_ONE_MINUS_SRC_COLOR:
469 case GL_DST_COLOR:
470 case GL_ONE_MINUS_DST_COLOR:
471 case GL_SRC_ALPHA:
472 case GL_ONE_MINUS_SRC_ALPHA:
473 case GL_DST_ALPHA:
474 case GL_ONE_MINUS_DST_ALPHA:
475 case GL_CONSTANT_COLOR:
476 case GL_ONE_MINUS_CONSTANT_COLOR:
477 case GL_CONSTANT_ALPHA:
478 case GL_ONE_MINUS_CONSTANT_ALPHA:
479 break;
480 default:
481 return error(GL_INVALID_ENUM);
482 }
483
484 switch(srcAlpha)
485 {
486 case GL_ZERO:
487 case GL_ONE:
488 case GL_SRC_COLOR:
489 case GL_ONE_MINUS_SRC_COLOR:
490 case GL_DST_COLOR:
491 case GL_ONE_MINUS_DST_COLOR:
492 case GL_SRC_ALPHA:
493 case GL_ONE_MINUS_SRC_ALPHA:
494 case GL_DST_ALPHA:
495 case GL_ONE_MINUS_DST_ALPHA:
496 case GL_CONSTANT_COLOR:
497 case GL_ONE_MINUS_CONSTANT_COLOR:
498 case GL_CONSTANT_ALPHA:
499 case GL_ONE_MINUS_CONSTANT_ALPHA:
500 case GL_SRC_ALPHA_SATURATE:
501 break;
502 default:
503 return error(GL_INVALID_ENUM);
504 }
505
506 switch(dstAlpha)
507 {
508 case GL_ZERO:
509 case GL_ONE:
510 case GL_SRC_COLOR:
511 case GL_ONE_MINUS_SRC_COLOR:
512 case GL_DST_COLOR:
513 case GL_ONE_MINUS_DST_COLOR:
514 case GL_SRC_ALPHA:
515 case GL_ONE_MINUS_SRC_ALPHA:
516 case GL_DST_ALPHA:
517 case GL_ONE_MINUS_DST_ALPHA:
518 case GL_CONSTANT_COLOR:
519 case GL_ONE_MINUS_CONSTANT_COLOR:
520 case GL_CONSTANT_ALPHA:
521 case GL_ONE_MINUS_CONSTANT_ALPHA:
522 break;
523 default:
524 return error(GL_INVALID_ENUM);
525 }
526
Nicolas Capensf4486fd2015-01-22 11:10:37 -0500527 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -0500528
529 if(context)
530 {
Nicolas Capensa9b49372015-01-30 00:33:26 -0500531 if(context->getListIndex() != 0)
532 {
533 UNIMPLEMENTED();
534 }
535
Nicolas Capens264f1522015-01-09 17:21:17 -0500536 context->setBlendFactors(srcRGB, dstRGB, srcAlpha, dstAlpha);
537 }
538}
539
Nicolas Capensa9b49372015-01-30 00:33:26 -0500540void APIENTRY glBufferData(GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage)
Nicolas Capens264f1522015-01-09 17:21:17 -0500541{
Nicolas Capens4be33702015-04-28 15:13:30 -0700542 TRACE("(GLenum target = 0x%X, GLsizeiptr size = %d, const GLvoid* data = %p, GLenum usage = %d)",
Nicolas Capens264f1522015-01-09 17:21:17 -0500543 target, size, data, usage);
544
545 if(size < 0)
546 {
547 return error(GL_INVALID_VALUE);
548 }
549
550 switch(usage)
551 {
552 case GL_STREAM_DRAW:
553 case GL_STATIC_DRAW:
554 case GL_DYNAMIC_DRAW:
555 break;
556 default:
557 return error(GL_INVALID_ENUM);
558 }
559
Nicolas Capensf4486fd2015-01-22 11:10:37 -0500560 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -0500561
562 if(context)
563 {
Nicolas Capensf4486fd2015-01-22 11:10:37 -0500564 gl::Buffer *buffer;
Nicolas Capens264f1522015-01-09 17:21:17 -0500565
566 switch(target)
567 {
568 case GL_ARRAY_BUFFER:
569 buffer = context->getArrayBuffer();
570 break;
571 case GL_ELEMENT_ARRAY_BUFFER:
572 buffer = context->getElementArrayBuffer();
573 break;
574 default:
575 return error(GL_INVALID_ENUM);
576 }
577
578 if(!buffer)
579 {
580 return error(GL_INVALID_OPERATION);
581 }
582
583 buffer->bufferData(data, size, usage);
584 }
585}
586
Nicolas Capensa9b49372015-01-30 00:33:26 -0500587void APIENTRY glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data)
Nicolas Capens264f1522015-01-09 17:21:17 -0500588{
Nicolas Capens4be33702015-04-28 15:13:30 -0700589 TRACE("(GLenum target = 0x%X, GLintptr offset = %d, GLsizeiptr size = %d, const GLvoid* data = %p)",
Nicolas Capens264f1522015-01-09 17:21:17 -0500590 target, offset, size, data);
591
592 if(size < 0 || offset < 0)
593 {
594 return error(GL_INVALID_VALUE);
595 }
596
597 if(data == NULL)
598 {
599 return;
600 }
601
Nicolas Capensf4486fd2015-01-22 11:10:37 -0500602 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -0500603
604 if(context)
605 {
Nicolas Capensf4486fd2015-01-22 11:10:37 -0500606 gl::Buffer *buffer;
Nicolas Capens264f1522015-01-09 17:21:17 -0500607
608 switch(target)
609 {
610 case GL_ARRAY_BUFFER:
611 buffer = context->getArrayBuffer();
612 break;
613 case GL_ELEMENT_ARRAY_BUFFER:
614 buffer = context->getElementArrayBuffer();
615 break;
616 default:
617 return error(GL_INVALID_ENUM);
618 }
619
620 if(!buffer)
621 {
622 return error(GL_INVALID_OPERATION);
623 }
624
625 if((size_t)size + offset > buffer->size())
626 {
627 return error(GL_INVALID_VALUE);
628 }
629
630 buffer->bufferSubData(data, size, offset);
631 }
632}
633
Nicolas Capensa9b49372015-01-30 00:33:26 -0500634GLenum APIENTRY glCheckFramebufferStatus(GLenum target)
Nicolas Capens264f1522015-01-09 17:21:17 -0500635{
636 TRACE("(GLenum target = 0x%X)", target);
637
Nicolas Capensa9b49372015-01-30 00:33:26 -0500638 if(target != GL_FRAMEBUFFER && target != GL_DRAW_FRAMEBUFFER_EXT && target != GL_READ_FRAMEBUFFER_EXT)
Nicolas Capens264f1522015-01-09 17:21:17 -0500639 {
640 return error(GL_INVALID_ENUM, 0);
641 }
642
Nicolas Capensf4486fd2015-01-22 11:10:37 -0500643 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -0500644
645 if(context)
646 {
Nicolas Capensa9b49372015-01-30 00:33:26 -0500647 if(context->getListIndex() != 0)
648 {
649 UNIMPLEMENTED();
650 }
651
Nicolas Capensf4486fd2015-01-22 11:10:37 -0500652 gl::Framebuffer *framebuffer = NULL;
Nicolas Capensa9b49372015-01-30 00:33:26 -0500653 if(target == GL_READ_FRAMEBUFFER_EXT)
Nicolas Capens264f1522015-01-09 17:21:17 -0500654 {
655 framebuffer = context->getReadFramebuffer();
656 }
657 else
658 {
659 framebuffer = context->getDrawFramebuffer();
660 }
661
662 return framebuffer->completeness();
663 }
664
665 return 0;
666}
667
Nicolas Capensa9b49372015-01-30 00:33:26 -0500668void APIENTRY glClear(GLbitfield mask)
Nicolas Capens264f1522015-01-09 17:21:17 -0500669{
670 TRACE("(GLbitfield mask = %X)", mask);
671
672 if((mask & ~(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT)) != 0)
673 {
674 return error(GL_INVALID_VALUE);
675 }
676
Nicolas Capensf4486fd2015-01-22 11:10:37 -0500677 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -0500678
679 if(context)
680 {
Nicolas Capensa9b49372015-01-30 00:33:26 -0500681 if(context->getListIndex() != 0)
682 {
683 return context->listCommand(gl::newCommand(glClear, mask));
684 }
685
Nicolas Capens264f1522015-01-09 17:21:17 -0500686 context->clear(mask);
687 }
688}
689
Nicolas Capensa9b49372015-01-30 00:33:26 -0500690void APIENTRY glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
Nicolas Capens264f1522015-01-09 17:21:17 -0500691{
692 TRACE("(GLclampf red = %f, GLclampf green = %f, GLclampf blue = %f, GLclampf alpha = %f)",
693 red, green, blue, alpha);
694
Nicolas Capensf4486fd2015-01-22 11:10:37 -0500695 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -0500696
697 if(context)
698 {
Nicolas Capensa9b49372015-01-30 00:33:26 -0500699 if(context->getListIndex() != 0)
700 {
701 UNIMPLEMENTED();
702 }
703
Nicolas Capens264f1522015-01-09 17:21:17 -0500704 context->setClearColor(red, green, blue, alpha);
705 }
706}
707
Nicolas Capensa9b49372015-01-30 00:33:26 -0500708void APIENTRY glClearDepthf(GLclampf depth)
Nicolas Capens264f1522015-01-09 17:21:17 -0500709{
710 TRACE("(GLclampf depth = %f)", depth);
711
Nicolas Capensf4486fd2015-01-22 11:10:37 -0500712 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -0500713
714 if(context)
715 {
Nicolas Capensa9b49372015-01-30 00:33:26 -0500716 if(context->getListIndex() != 0)
717 {
718 UNIMPLEMENTED();
719 }
720
Nicolas Capens264f1522015-01-09 17:21:17 -0500721 context->setClearDepth(depth);
722 }
723}
724
Maxime Grégoire20942c02015-07-16 14:12:47 -0400725void APIENTRY glVertexAttrib1dv(GLuint index, const GLdouble *v)
726{
727 TRACE("*");
728 UNIMPLEMENTED();
729}
730void APIENTRY glVertexAttrib1sv(GLuint index, const GLshort *v)
731{
732 TRACE("*");
733 UNIMPLEMENTED();
734}
735void APIENTRY glVertexAttrib2dv(GLuint index, const GLdouble *v)
736{
737 TRACE("*");
738 UNIMPLEMENTED();
739}
740
741void APIENTRY glVertexAttrib2sv(GLuint index, const GLshort *v)
742{
743 TRACE("*");
744 UNIMPLEMENTED();
745}
746void APIENTRY glVertexAttrib3dv(GLuint index, const GLdouble *v)
747{
748 TRACE("*");
749 UNIMPLEMENTED();
750}
751void APIENTRY glVertexAttrib3sv(GLuint index, const GLshort *v)
752{
753 TRACE("*");
754 UNIMPLEMENTED();
755}
756void APIENTRY glVertexAttrib4Nbv(GLuint index, const GLbyte *v)
757{
758 TRACE("*");
759 UNIMPLEMENTED();
760}
761void APIENTRY glVertexAttrib4Niv(GLuint index, const GLint *v)
762{
763 TRACE("*");
764 UNIMPLEMENTED();
765}
766void APIENTRY glVertexAttrib4Nsv(GLuint index, const GLshort *v)
767{
768 TRACE("*");
769 UNIMPLEMENTED();
770}
771void APIENTRY glVertexAttrib4Nubv(GLuint index, const GLubyte *v)
772{
773 TRACE("*");
774 UNIMPLEMENTED();
775}
776void APIENTRY glVertexAttrib4Nuiv(GLuint index, const GLuint *v)
777{
778 TRACE("*");
779 UNIMPLEMENTED();
780}
781void APIENTRY glVertexAttrib4Nusv(GLuint index, const GLushort *v)
782{
783 TRACE("*");
784 UNIMPLEMENTED();
785}
786void APIENTRY glFogCoordfv(const GLfloat *coord)
787{
788 TRACE("*");
789 UNIMPLEMENTED();
790}
791void APIENTRY glFogCoorddv(const GLdouble *coord)
792{
793 TRACE("*");
794 UNIMPLEMENTED();
795}
796void APIENTRY glMultiDrawElements(GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount)
797{
798 TRACE("*");
799 UNIMPLEMENTED();
800}
801void APIENTRY glSecondaryColor3bv(const GLbyte *v)
802{
803 TRACE("*");
804 UNIMPLEMENTED();
805}
806void APIENTRY glSecondaryColor3dv(const GLdouble *v)
807{
808 TRACE("*");
809 UNIMPLEMENTED();
810}
811void APIENTRY glSecondaryColor3fv(const GLfloat *v)
812{
813 TRACE("*");
814 UNIMPLEMENTED();
815}
816void APIENTRY glSecondaryColor3i(GLint red, GLint green, GLint blue)
817{
818 TRACE("*");
819 UNIMPLEMENTED();
820}
821void APIENTRY glSecondaryColor3iv(const GLint *v)
822{
823 TRACE("*");
824 UNIMPLEMENTED();
825}
826void APIENTRY glSecondaryColor3s(GLshort red, GLshort green, GLshort blue)
827{
828 TRACE("*");
829 UNIMPLEMENTED();
830}
831void APIENTRY glSecondaryColor3sv(const GLshort *v)
832{
833 TRACE("*");
834 UNIMPLEMENTED();
835}
836void APIENTRY glSecondaryColor3ubv(const GLubyte *v)
837{
838 TRACE("*");
839 UNIMPLEMENTED();
840}
841void APIENTRY glSecondaryColor3ui(GLuint red, GLuint green, GLuint blue)
842{
843 TRACE("*");
844 UNIMPLEMENTED();
845}
846void APIENTRY glSecondaryColor3uiv(const GLuint *v)
847{
848 TRACE("*");
849 UNIMPLEMENTED();
850}
851void APIENTRY glSecondaryColor3us(GLushort red, GLushort green, GLushort blue)
852{
853 TRACE("*");
854 UNIMPLEMENTED();
855}
856void APIENTRY glSecondaryColor3usv(const GLushort *v)
857{
858 TRACE("*");
859 UNIMPLEMENTED();
860}
861void APIENTRY glWindowPos2dv(const GLdouble *v)
862{
863 TRACE("*");
864 UNIMPLEMENTED();
865}
866void APIENTRY glWindowPos2fv(const GLfloat *v)
867{
868 TRACE("*");
869 UNIMPLEMENTED();
870}
871void APIENTRY glWindowPos2iv(const GLint *v)
872{
873 TRACE("*");
874 UNIMPLEMENTED();
875}
876void APIENTRY glWindowPos2s(GLshort x, GLshort y)
877{
878 TRACE("*");
879 UNIMPLEMENTED();
880}
881void APIENTRY glWindowPos2sv(const GLshort *v)
882{
883 TRACE("*");
884 UNIMPLEMENTED();
885}
886void APIENTRY glWindowPos3dv(const GLdouble *v)
887{
888 TRACE("*");
889 UNIMPLEMENTED();
890}
891void APIENTRY glWindowPos3fv(const GLfloat *v)
892{
893 TRACE("*");
894 UNIMPLEMENTED();
895}
896void APIENTRY glWindowPos3iv(const GLint *v)
897{
898 TRACE("*");
899 UNIMPLEMENTED();
900}
901void APIENTRY glWindowPos3s(GLshort x, GLshort y, GLshort z)
902{
903 TRACE("*");
904 UNIMPLEMENTED();
905}
906void APIENTRY glWindowPos3sv(const GLshort *v)
907{
908 TRACE("*");
909 UNIMPLEMENTED();
910}
911void APIENTRY glMultiTexCoord1dv(GLenum target, const GLdouble *v)
912{
913 TRACE("*");
914 UNIMPLEMENTED();
915}
916void APIENTRY glMultiTexCoord1fv(GLenum target, const GLfloat *v)
917{
918 TRACE("*");
919 UNIMPLEMENTED();
920}
921void APIENTRY glMultiTexCoord1i(GLenum target, GLint s)
922{
923 TRACE("*");
924 UNIMPLEMENTED();
925}
926void APIENTRY glMultiTexCoord1iv(GLenum target, const GLint *v)
927{
928 TRACE("*");
929 UNIMPLEMENTED();
930}
931void APIENTRY glMultiTexCoord1s(GLenum target, GLshort s)
932{
933 TRACE("*");
934 UNIMPLEMENTED();
935}
936void APIENTRY glMultiTexCoord1sv(GLenum target, const GLshort *v)
937{
938 TRACE("*");
939 UNIMPLEMENTED();
940}
941void APIENTRY glMultiTexCoord2dv(GLenum target, const GLdouble *v)
942{
943 TRACE("*");
944 UNIMPLEMENTED();
945}
946void APIENTRY glMultiTexCoord2fv(GLenum target, const GLfloat *v)
947{
948 TRACE("*");
949 UNIMPLEMENTED();
950}
951void APIENTRY glMultiTexCoord2i(GLenum target, GLint s, GLint t)
952{
953 TRACE("*");
954 UNIMPLEMENTED();
955}
956void APIENTRY glMultiTexCoord2iv(GLenum target, const GLint *v)
957{
958 TRACE("*");
959 UNIMPLEMENTED();
960}
961void APIENTRY glMultiTexCoord2s(GLenum target, GLshort s, GLshort t)
962{
963 TRACE("*");
964 UNIMPLEMENTED();
965}
966void APIENTRY glMultiTexCoord2sv(GLenum target, const GLshort *v)
967{
968 TRACE("*");
969 UNIMPLEMENTED();
970}
971void APIENTRY glMultiTexCoord3dv(GLenum target, const GLdouble *v)
972{
973 TRACE("*");
974 UNIMPLEMENTED();
975}
976void APIENTRY glMultiTexCoord3fv(GLenum target, const GLfloat *v)
977{
978 TRACE("*");
979 UNIMPLEMENTED();
980}
981void APIENTRY glMultiTexCoord3i(GLenum target, GLint s, GLint t, GLint r)
982{
983 TRACE("*");
984 UNIMPLEMENTED();
985}
986void APIENTRY glMultiTexCoord3iv(GLenum target, const GLint *v)
987{
988 TRACE("*");
989 UNIMPLEMENTED();
990}
991void APIENTRY glMultiTexCoord3s(GLenum target, GLshort s, GLshort t, GLshort r)
992{
993 TRACE("*");
994 UNIMPLEMENTED();
995}
996void APIENTRY glMultiTexCoord3sv(GLenum target, const GLshort *v)
997{
998 TRACE("*");
999 UNIMPLEMENTED();
1000}
1001void APIENTRY glMultiTexCoord4dv(GLenum target, const GLdouble *v)
1002{
1003 TRACE("*");
1004 UNIMPLEMENTED();
1005}
1006void APIENTRY glMultiTexCoord4fv(GLenum target, const GLfloat *v)
1007{
1008 TRACE("*");
1009 UNIMPLEMENTED();
1010}
1011void APIENTRY glMultiTexCoord4i(GLenum target, GLint s, GLint t, GLint r, GLint q)
1012{
1013 TRACE("*");
1014 UNIMPLEMENTED();
1015}
1016void APIENTRY glMultiTexCoord4iv(GLenum target, const GLint *v)
1017{
1018 TRACE("*");
1019 UNIMPLEMENTED();
1020}
1021void APIENTRY glMultiTexCoord4s(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q)
1022{
1023 TRACE("*");
1024 UNIMPLEMENTED();
1025}
1026void APIENTRY glMultiTexCoord4sv(GLenum target, const GLshort *v)
1027{
1028 TRACE("*");
1029 UNIMPLEMENTED();
1030}
1031void APIENTRY glBlendEquationEXT(GLenum mode)
1032{
1033 TRACE("*");
1034 UNIMPLEMENTED();
1035}
1036void APIENTRY glBlendFuncSeparateEXT(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha)
1037{
1038 TRACE("*");
1039 UNIMPLEMENTED();
1040}
1041void APIENTRY glSecondaryColor3bEXT(GLbyte red, GLbyte green, GLbyte blue)
1042{
1043 TRACE("*");
1044 UNIMPLEMENTED();
1045}
1046void APIENTRY glSecondaryColor3bvEXT(const GLbyte *v)
1047{
1048 TRACE("*");
1049 UNIMPLEMENTED();
1050}
1051void APIENTRY glSecondaryColor3dEXT(GLdouble red, GLdouble green, GLdouble blue)
1052{
1053 TRACE("*");
1054 UNIMPLEMENTED();
1055}
1056void APIENTRY glSecondaryColor3dvEXT(const GLdouble *v)
1057{
1058 TRACE("*");
1059 UNIMPLEMENTED();
1060}
1061void APIENTRY glSecondaryColor3fEXT(GLfloat red, GLfloat green, GLfloat blue)
1062{
1063 TRACE("*");
1064 UNIMPLEMENTED();
1065}
1066void APIENTRY glSecondaryColor3fvEXT(const GLfloat *v)
1067{
1068 TRACE("*");
1069 UNIMPLEMENTED();
1070}
1071void APIENTRY glSecondaryColor3iEXT(GLint red, GLint green, GLint blue)
1072{
1073 TRACE("*");
1074 UNIMPLEMENTED();
1075}
1076void APIENTRY glSecondaryColor3ivEXT(const GLint *v)
1077{
1078 TRACE("*");
1079 UNIMPLEMENTED();
1080}
1081void APIENTRY glSecondaryColor3sEXT(GLshort red, GLshort green, GLshort blue)
1082{
1083 TRACE("*");
1084 UNIMPLEMENTED();
1085}
1086void APIENTRY glSecondaryColor3svEXT(const GLshort *v)
1087{
1088 TRACE("*");
1089 UNIMPLEMENTED();
1090}
1091void APIENTRY glSecondaryColor3ubEXT(GLubyte red, GLubyte green, GLubyte blue)
1092{
1093 TRACE("*");
1094 UNIMPLEMENTED();
1095}
1096void APIENTRY glSecondaryColor3ubvEXT(const GLubyte *v)
1097{
1098 TRACE("*");
1099 UNIMPLEMENTED();
1100}
1101void APIENTRY glSecondaryColor3uiEXT(GLuint red, GLuint green, GLuint blue)
1102{
1103 TRACE("*");
1104 UNIMPLEMENTED();
1105}
1106void APIENTRY glSecondaryColor3uivEXT(const GLuint *v)
1107{
1108 TRACE("*");
1109 UNIMPLEMENTED();
1110}
1111void APIENTRY glSecondaryColor3usEXT(GLushort red, GLushort green, GLushort blue)
1112{
1113 TRACE("*");
1114 UNIMPLEMENTED();
1115}
1116void APIENTRY glSecondaryColor3usvEXT(const GLushort *v)
1117{
1118 TRACE("*");
1119 UNIMPLEMENTED();
1120}
1121void APIENTRY glSecondaryColorPointerEXT(GLint size, GLenum type, GLsizei stride, const void *pointer)
1122{
1123 TRACE("*");
1124 UNIMPLEMENTED();
1125}
1126void APIENTRY glBlitFramebufferEXT(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)
1127{
1128 TRACE("*");
1129 UNIMPLEMENTED();
1130}
1131void APIENTRY glRenderbufferStorageMultisampleEXT(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)
1132{
1133 TRACE("*");
1134 UNIMPLEMENTED();
1135}
1136
1137
Nicolas Capensa9b49372015-01-30 00:33:26 -05001138void APIENTRY glClearStencil(GLint s)
Nicolas Capens264f1522015-01-09 17:21:17 -05001139{
1140 TRACE("(GLint s = %d)", s);
1141
Nicolas Capensf4486fd2015-01-22 11:10:37 -05001142 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05001143
1144 if(context)
1145 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05001146 if(context->getListIndex() != 0)
1147 {
1148 UNIMPLEMENTED();
1149 }
1150
Nicolas Capens264f1522015-01-09 17:21:17 -05001151 context->setClearStencil(s);
1152 }
1153}
1154
Nicolas Capensa9b49372015-01-30 00:33:26 -05001155void APIENTRY glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
Nicolas Capens264f1522015-01-09 17:21:17 -05001156{
1157 TRACE("(GLboolean red = %d, GLboolean green = %d, GLboolean blue = %d, GLboolean alpha = %d)",
1158 red, green, blue, alpha);
1159
Nicolas Capensf4486fd2015-01-22 11:10:37 -05001160 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05001161
1162 if(context)
1163 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05001164 if(context->getListIndex() != 0)
1165 {
1166 UNIMPLEMENTED();
1167 }
1168
Nicolas Capens264f1522015-01-09 17:21:17 -05001169 context->setColorMask(red == GL_TRUE, green == GL_TRUE, blue == GL_TRUE, alpha == GL_TRUE);
1170 }
1171}
1172
Nicolas Capensa9b49372015-01-30 00:33:26 -05001173void APIENTRY glCompileShader(GLuint shader)
Nicolas Capens264f1522015-01-09 17:21:17 -05001174{
1175 TRACE("(GLuint shader = %d)", shader);
1176
Nicolas Capensf4486fd2015-01-22 11:10:37 -05001177 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05001178
1179 if(context)
1180 {
Nicolas Capensf4486fd2015-01-22 11:10:37 -05001181 gl::Shader *shaderObject = context->getShader(shader);
Nicolas Capens264f1522015-01-09 17:21:17 -05001182
1183 if(!shaderObject)
1184 {
1185 if(context->getProgram(shader))
1186 {
1187 return error(GL_INVALID_OPERATION);
1188 }
1189 else
1190 {
1191 return error(GL_INVALID_VALUE);
1192 }
1193 }
1194
1195 shaderObject->compile();
1196 }
1197}
1198
Nicolas Capensa9b49372015-01-30 00:33:26 -05001199void APIENTRY glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height,
Maxime Grégoire20942c02015-07-16 14:12:47 -04001200 GLint border, GLsizei imageSize, const GLvoid* data)
Nicolas Capens264f1522015-01-09 17:21:17 -05001201{
1202 TRACE("(GLenum target = 0x%X, GLint level = %d, GLenum internalformat = 0x%X, GLsizei width = %d, "
Maxime Grégoire20942c02015-07-16 14:12:47 -04001203 "GLsizei height = %d, GLint border = %d, GLsizei imageSize = %d, const GLvoid* data = %p)",
1204 target, level, internalformat, width, height, border, imageSize, data);
Nicolas Capens264f1522015-01-09 17:21:17 -05001205
1206 if(!validImageSize(level, width, height) || border != 0 || imageSize < 0)
1207 {
1208 return error(GL_INVALID_VALUE);
1209 }
1210
1211 switch(internalformat)
1212 {
Nicolas Capens264f1522015-01-09 17:21:17 -05001213 case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
1214 case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
Nicolas Capensa9b49372015-01-30 00:33:26 -05001215 case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
1216 case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
Nicolas Capens264f1522015-01-09 17:21:17 -05001217 if(!S3TC_SUPPORT)
1218 {
1219 return error(GL_INVALID_ENUM);
1220 }
1221 break;
1222 case GL_DEPTH_COMPONENT:
1223 case GL_DEPTH_COMPONENT16:
Nicolas Capensa9b49372015-01-30 00:33:26 -05001224 case GL_DEPTH_COMPONENT32:
1225 case GL_DEPTH_STENCIL_EXT:
1226 case GL_DEPTH24_STENCIL8_EXT:
Nicolas Capens264f1522015-01-09 17:21:17 -05001227 return error(GL_INVALID_OPERATION);
1228 default:
1229 return error(GL_INVALID_ENUM);
1230 }
1231
1232 if(border != 0)
1233 {
1234 return error(GL_INVALID_VALUE);
1235 }
1236
Nicolas Capensf4486fd2015-01-22 11:10:37 -05001237 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05001238
1239 if(context)
1240 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05001241 if(context->getListIndex() != 0)
1242 {
1243 UNIMPLEMENTED();
1244 }
1245
Nicolas Capensf4486fd2015-01-22 11:10:37 -05001246 if(level > gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS)
Nicolas Capens264f1522015-01-09 17:21:17 -05001247 {
1248 return error(GL_INVALID_VALUE);
1249 }
1250
1251 switch(target)
1252 {
1253 case GL_TEXTURE_2D:
Nicolas Capensf4486fd2015-01-22 11:10:37 -05001254 if(width > (gl::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level) ||
Maxime Grégoire20942c02015-07-16 14:12:47 -04001255 height > (gl::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level))
Nicolas Capens264f1522015-01-09 17:21:17 -05001256 {
1257 return error(GL_INVALID_VALUE);
1258 }
1259 break;
1260 case GL_TEXTURE_CUBE_MAP_POSITIVE_X:
1261 case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:
1262 case GL_TEXTURE_CUBE_MAP_POSITIVE_Y:
1263 case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y:
1264 case GL_TEXTURE_CUBE_MAP_POSITIVE_Z:
1265 case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:
1266 if(width != height)
1267 {
1268 return error(GL_INVALID_VALUE);
1269 }
1270
Nicolas Capensf4486fd2015-01-22 11:10:37 -05001271 if(width > (gl::IMPLEMENTATION_MAX_CUBE_MAP_TEXTURE_SIZE >> level) ||
Maxime Grégoire20942c02015-07-16 14:12:47 -04001272 height > (gl::IMPLEMENTATION_MAX_CUBE_MAP_TEXTURE_SIZE >> level))
Nicolas Capens264f1522015-01-09 17:21:17 -05001273 {
1274 return error(GL_INVALID_VALUE);
1275 }
1276 break;
1277 default:
1278 return error(GL_INVALID_ENUM);
1279 }
1280
Nicolas Capensf4486fd2015-01-22 11:10:37 -05001281 if(imageSize != gl::ComputeCompressedSize(width, height, internalformat))
Nicolas Capens264f1522015-01-09 17:21:17 -05001282 {
1283 return error(GL_INVALID_VALUE);
1284 }
1285
1286 if(target == GL_TEXTURE_2D)
1287 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05001288 gl::Texture2D *texture = context->getTexture2D(target);
Nicolas Capens264f1522015-01-09 17:21:17 -05001289
1290 if(!texture)
1291 {
1292 return error(GL_INVALID_OPERATION);
1293 }
1294
1295 texture->setCompressedImage(level, internalformat, width, height, imageSize, data);
1296 }
1297 else
1298 {
Nicolas Capensf4486fd2015-01-22 11:10:37 -05001299 gl::TextureCubeMap *texture = context->getTextureCubeMap();
Nicolas Capens264f1522015-01-09 17:21:17 -05001300
1301 if(!texture)
1302 {
1303 return error(GL_INVALID_OPERATION);
1304 }
1305
1306 switch(target)
1307 {
1308 case GL_TEXTURE_CUBE_MAP_POSITIVE_X:
1309 case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:
1310 case GL_TEXTURE_CUBE_MAP_POSITIVE_Y:
1311 case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y:
1312 case GL_TEXTURE_CUBE_MAP_POSITIVE_Z:
1313 case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:
1314 texture->setCompressedImage(target, level, internalformat, width, height, imageSize, data);
1315 break;
1316 default: UNREACHABLE();
1317 }
1318 }
1319 }
1320}
1321
Nicolas Capensa9b49372015-01-30 00:33:26 -05001322void APIENTRY glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
Maxime Grégoire20942c02015-07-16 14:12:47 -04001323 GLenum format, GLsizei imageSize, const GLvoid* data)
Nicolas Capens264f1522015-01-09 17:21:17 -05001324{
1325 TRACE("(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, "
Maxime Grégoire20942c02015-07-16 14:12:47 -04001326 "GLsizei width = %d, GLsizei height = %d, GLenum format = 0x%X, "
1327 "GLsizei imageSize = %d, const GLvoid* data = %p)",
1328 target, level, xoffset, yoffset, width, height, format, imageSize, data);
Nicolas Capens264f1522015-01-09 17:21:17 -05001329
Nicolas Capensf4486fd2015-01-22 11:10:37 -05001330 if(!gl::IsTextureTarget(target))
Nicolas Capens264f1522015-01-09 17:21:17 -05001331 {
1332 return error(GL_INVALID_ENUM);
1333 }
1334
1335 if(xoffset < 0 || yoffset < 0 || !validImageSize(level, width, height) || imageSize < 0)
1336 {
1337 return error(GL_INVALID_VALUE);
1338 }
1339
1340 switch(format)
1341 {
Nicolas Capens264f1522015-01-09 17:21:17 -05001342 case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
1343 case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
Nicolas Capensa9b49372015-01-30 00:33:26 -05001344 case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
1345 case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
Nicolas Capens264f1522015-01-09 17:21:17 -05001346 if(!S3TC_SUPPORT)
1347 {
1348 return error(GL_INVALID_ENUM);
1349 }
1350 break;
1351 default:
1352 return error(GL_INVALID_ENUM);
1353 }
1354
1355 if(width == 0 || height == 0 || data == NULL)
1356 {
1357 return;
1358 }
1359
Nicolas Capensf4486fd2015-01-22 11:10:37 -05001360 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05001361
1362 if(context)
1363 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05001364 if(context->getListIndex() != 0)
1365 {
1366 UNIMPLEMENTED();
1367 }
1368
Nicolas Capensf4486fd2015-01-22 11:10:37 -05001369 if(level > gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS)
Nicolas Capens264f1522015-01-09 17:21:17 -05001370 {
1371 return error(GL_INVALID_VALUE);
1372 }
1373
Nicolas Capensf4486fd2015-01-22 11:10:37 -05001374 if(imageSize != gl::ComputeCompressedSize(width, height, format))
Nicolas Capens264f1522015-01-09 17:21:17 -05001375 {
1376 return error(GL_INVALID_VALUE);
1377 }
1378
1379 if(xoffset % 4 != 0 || yoffset % 4 != 0)
1380 {
1381 // We wait to check the offsets until this point, because the multiple-of-four restriction does not exist unless DXT1 textures are supported
1382 return error(GL_INVALID_OPERATION);
1383 }
1384
1385 if(target == GL_TEXTURE_2D)
1386 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05001387 gl::Texture2D *texture = context->getTexture2D(target);
Nicolas Capens264f1522015-01-09 17:21:17 -05001388
1389 if(validateSubImageParams(true, width, height, xoffset, yoffset, target, level, format, texture))
1390 {
1391 texture->subImageCompressed(level, xoffset, yoffset, width, height, format, imageSize, data);
1392 }
1393 }
Nicolas Capensf4486fd2015-01-22 11:10:37 -05001394 else if(gl::IsCubemapTextureTarget(target))
Nicolas Capens264f1522015-01-09 17:21:17 -05001395 {
Nicolas Capensf4486fd2015-01-22 11:10:37 -05001396 gl::TextureCubeMap *texture = context->getTextureCubeMap();
Nicolas Capens264f1522015-01-09 17:21:17 -05001397
1398 if(validateSubImageParams(true, width, height, xoffset, yoffset, target, level, format, texture))
1399 {
1400 texture->subImageCompressed(target, level, xoffset, yoffset, width, height, format, imageSize, data);
1401 }
1402 }
1403 else
1404 {
1405 UNREACHABLE();
1406 }
1407 }
1408}
1409
Nicolas Capensa9b49372015-01-30 00:33:26 -05001410void APIENTRY glCopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
Nicolas Capens264f1522015-01-09 17:21:17 -05001411{
1412 TRACE("(GLenum target = 0x%X, GLint level = %d, GLenum internalformat = 0x%X, "
Maxime Grégoire20942c02015-07-16 14:12:47 -04001413 "GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d, GLint border = %d)",
1414 target, level, internalformat, x, y, width, height, border);
Nicolas Capens264f1522015-01-09 17:21:17 -05001415
1416 if(!validImageSize(level, width, height))
1417 {
1418 return error(GL_INVALID_VALUE);
1419 }
1420
1421 if(border != 0)
1422 {
1423 return error(GL_INVALID_VALUE);
1424 }
1425
Nicolas Capensf4486fd2015-01-22 11:10:37 -05001426 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05001427
1428 if(context)
1429 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05001430 if(context->getListIndex() != 0)
1431 {
1432 UNIMPLEMENTED();
1433 }
1434
Nicolas Capens264f1522015-01-09 17:21:17 -05001435 switch(target)
1436 {
1437 case GL_TEXTURE_2D:
Nicolas Capensf4486fd2015-01-22 11:10:37 -05001438 if(width > (gl::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level) ||
Maxime Grégoire20942c02015-07-16 14:12:47 -04001439 height > (gl::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level))
Nicolas Capens264f1522015-01-09 17:21:17 -05001440 {
1441 return error(GL_INVALID_VALUE);
1442 }
1443 break;
1444 case GL_TEXTURE_CUBE_MAP_POSITIVE_X:
1445 case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:
1446 case GL_TEXTURE_CUBE_MAP_POSITIVE_Y:
1447 case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y:
1448 case GL_TEXTURE_CUBE_MAP_POSITIVE_Z:
1449 case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:
1450 if(width != height)
1451 {
1452 return error(GL_INVALID_VALUE);
1453 }
1454
Nicolas Capensf4486fd2015-01-22 11:10:37 -05001455 if(width > (gl::IMPLEMENTATION_MAX_CUBE_MAP_TEXTURE_SIZE >> level) ||
Maxime Grégoire20942c02015-07-16 14:12:47 -04001456 height > (gl::IMPLEMENTATION_MAX_CUBE_MAP_TEXTURE_SIZE >> level))
Nicolas Capens264f1522015-01-09 17:21:17 -05001457 {
1458 return error(GL_INVALID_VALUE);
1459 }
1460 break;
1461 default:
1462 return error(GL_INVALID_ENUM);
1463 }
1464
Nicolas Capensf4486fd2015-01-22 11:10:37 -05001465 gl::Framebuffer *framebuffer = context->getReadFramebuffer();
Nicolas Capens264f1522015-01-09 17:21:17 -05001466
1467 if(framebuffer->completeness() != GL_FRAMEBUFFER_COMPLETE)
1468 {
1469 return error(GL_INVALID_FRAMEBUFFER_OPERATION);
1470 }
1471
Nicolas Capens7cc75e12015-01-29 14:44:24 -05001472 if(context->getReadFramebufferName() != 0 && framebuffer->getColorbuffer()->getSamples() > 1)
Nicolas Capens264f1522015-01-09 17:21:17 -05001473 {
1474 return error(GL_INVALID_OPERATION);
1475 }
1476
Nicolas Capensf4486fd2015-01-22 11:10:37 -05001477 gl::Renderbuffer *source = framebuffer->getColorbuffer();
Nicolas Capens264f1522015-01-09 17:21:17 -05001478 GLenum colorbufferFormat = source->getFormat();
1479
Nicolas Capens264f1522015-01-09 17:21:17 -05001480 switch(internalformat)
1481 {
1482 case GL_ALPHA:
1483 if(colorbufferFormat != GL_ALPHA &&
Maxime Grégoire20942c02015-07-16 14:12:47 -04001484 colorbufferFormat != GL_RGBA &&
1485 colorbufferFormat != GL_RGBA4 &&
1486 colorbufferFormat != GL_RGB5_A1 &&
1487 colorbufferFormat != GL_RGBA8_EXT)
Nicolas Capens264f1522015-01-09 17:21:17 -05001488 {
1489 return error(GL_INVALID_OPERATION);
1490 }
1491 break;
1492 case GL_LUMINANCE:
1493 case GL_RGB:
1494 if(colorbufferFormat != GL_RGB &&
Maxime Grégoire20942c02015-07-16 14:12:47 -04001495 colorbufferFormat != GL_RGB565 &&
1496 colorbufferFormat != GL_RGB8_EXT &&
1497 colorbufferFormat != GL_RGBA &&
1498 colorbufferFormat != GL_RGBA4 &&
1499 colorbufferFormat != GL_RGB5_A1 &&
1500 colorbufferFormat != GL_RGBA8_EXT)
Nicolas Capens264f1522015-01-09 17:21:17 -05001501 {
1502 return error(GL_INVALID_OPERATION);
1503 }
1504 break;
1505 case GL_LUMINANCE_ALPHA:
1506 case GL_RGBA:
1507 if(colorbufferFormat != GL_RGBA &&
Maxime Grégoire20942c02015-07-16 14:12:47 -04001508 colorbufferFormat != GL_RGBA4 &&
1509 colorbufferFormat != GL_RGB5_A1 &&
1510 colorbufferFormat != GL_RGBA8_EXT)
Nicolas Capens264f1522015-01-09 17:21:17 -05001511 {
1512 return error(GL_INVALID_OPERATION);
1513 }
1514 break;
Nicolas Capens264f1522015-01-09 17:21:17 -05001515 case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
1516 case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
Nicolas Capensa9b49372015-01-30 00:33:26 -05001517 case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
1518 case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
Nicolas Capens264f1522015-01-09 17:21:17 -05001519 if(S3TC_SUPPORT)
1520 {
1521 return error(GL_INVALID_OPERATION);
1522 }
1523 else
1524 {
1525 return error(GL_INVALID_ENUM);
1526 }
1527 default:
1528 return error(GL_INVALID_ENUM);
1529 }
1530
1531 if(target == GL_TEXTURE_2D)
1532 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05001533 gl::Texture2D *texture = context->getTexture2D(target);
Nicolas Capens264f1522015-01-09 17:21:17 -05001534
1535 if(!texture)
1536 {
1537 return error(GL_INVALID_OPERATION);
1538 }
1539
1540 texture->copyImage(level, internalformat, x, y, width, height, framebuffer);
1541 }
Nicolas Capensf4486fd2015-01-22 11:10:37 -05001542 else if(gl::IsCubemapTextureTarget(target))
Nicolas Capens264f1522015-01-09 17:21:17 -05001543 {
Nicolas Capensf4486fd2015-01-22 11:10:37 -05001544 gl::TextureCubeMap *texture = context->getTextureCubeMap();
Nicolas Capens264f1522015-01-09 17:21:17 -05001545
1546 if(!texture)
1547 {
1548 return error(GL_INVALID_OPERATION);
1549 }
1550
1551 texture->copyImage(target, level, internalformat, x, y, width, height, framebuffer);
1552 }
1553 else UNREACHABLE();
1554 }
1555}
1556
Nicolas Capensa9b49372015-01-30 00:33:26 -05001557void APIENTRY glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
Nicolas Capens264f1522015-01-09 17:21:17 -05001558{
1559 TRACE("(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, "
Maxime Grégoire20942c02015-07-16 14:12:47 -04001560 "GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d)",
1561 target, level, xoffset, yoffset, x, y, width, height);
Nicolas Capens264f1522015-01-09 17:21:17 -05001562
Nicolas Capensf4486fd2015-01-22 11:10:37 -05001563 if(!gl::IsTextureTarget(target))
Nicolas Capens264f1522015-01-09 17:21:17 -05001564 {
1565 return error(GL_INVALID_ENUM);
1566 }
1567
1568 if(level < 0 || xoffset < 0 || yoffset < 0 || width < 0 || height < 0)
1569 {
1570 return error(GL_INVALID_VALUE);
1571 }
1572
1573 if(std::numeric_limits<GLsizei>::max() - xoffset < width || std::numeric_limits<GLsizei>::max() - yoffset < height)
1574 {
1575 return error(GL_INVALID_VALUE);
1576 }
1577
1578 if(width == 0 || height == 0)
1579 {
1580 return;
1581 }
1582
Nicolas Capensf4486fd2015-01-22 11:10:37 -05001583 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05001584
1585 if(context)
1586 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05001587 if(context->getListIndex() != 0)
1588 {
1589 UNIMPLEMENTED();
1590 }
1591
Nicolas Capensf4486fd2015-01-22 11:10:37 -05001592 if(level > gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS)
Nicolas Capens264f1522015-01-09 17:21:17 -05001593 {
1594 return error(GL_INVALID_VALUE);
1595 }
1596
Nicolas Capensf4486fd2015-01-22 11:10:37 -05001597 gl::Framebuffer *framebuffer = context->getReadFramebuffer();
Nicolas Capens264f1522015-01-09 17:21:17 -05001598
1599 if(framebuffer->completeness() != GL_FRAMEBUFFER_COMPLETE)
1600 {
1601 return error(GL_INVALID_FRAMEBUFFER_OPERATION);
1602 }
1603
Nicolas Capens7cc75e12015-01-29 14:44:24 -05001604 if(context->getReadFramebufferName() != 0 && framebuffer->getColorbuffer()->getSamples() > 1)
Nicolas Capens264f1522015-01-09 17:21:17 -05001605 {
1606 return error(GL_INVALID_OPERATION);
1607 }
1608
Nicolas Capensf4486fd2015-01-22 11:10:37 -05001609 gl::Renderbuffer *source = framebuffer->getColorbuffer();
Nicolas Capens264f1522015-01-09 17:21:17 -05001610 GLenum colorbufferFormat = source->getFormat();
Nicolas Capensf4486fd2015-01-22 11:10:37 -05001611 gl::Texture *texture = NULL;
Nicolas Capens264f1522015-01-09 17:21:17 -05001612
1613 if(target == GL_TEXTURE_2D)
1614 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05001615 texture = context->getTexture2D(target);
Nicolas Capens264f1522015-01-09 17:21:17 -05001616 }
Nicolas Capensf4486fd2015-01-22 11:10:37 -05001617 else if(gl::IsCubemapTextureTarget(target))
Nicolas Capens264f1522015-01-09 17:21:17 -05001618 {
1619 texture = context->getTextureCubeMap();
1620 }
1621 else UNREACHABLE();
1622
1623 if(!validateSubImageParams(false, width, height, xoffset, yoffset, target, level, GL_NONE, texture))
1624 {
1625 return;
1626 }
1627
1628 GLenum textureFormat = texture->getFormat(target, level);
1629
Nicolas Capens264f1522015-01-09 17:21:17 -05001630 switch(textureFormat)
1631 {
1632 case GL_ALPHA:
1633 if(colorbufferFormat != GL_ALPHA &&
Maxime Grégoire20942c02015-07-16 14:12:47 -04001634 colorbufferFormat != GL_RGBA &&
1635 colorbufferFormat != GL_RGBA4 &&
1636 colorbufferFormat != GL_RGB5_A1 &&
1637 colorbufferFormat != GL_RGBA8_EXT)
Nicolas Capens264f1522015-01-09 17:21:17 -05001638 {
1639 return error(GL_INVALID_OPERATION);
1640 }
1641 break;
1642 case GL_LUMINANCE:
1643 case GL_RGB:
1644 if(colorbufferFormat != GL_RGB &&
Maxime Grégoire20942c02015-07-16 14:12:47 -04001645 colorbufferFormat != GL_RGB565 &&
1646 colorbufferFormat != GL_RGB8_EXT &&
1647 colorbufferFormat != GL_RGBA &&
1648 colorbufferFormat != GL_RGBA4 &&
1649 colorbufferFormat != GL_RGB5_A1 &&
1650 colorbufferFormat != GL_RGBA8_EXT)
Nicolas Capens264f1522015-01-09 17:21:17 -05001651 {
1652 return error(GL_INVALID_OPERATION);
1653 }
1654 break;
1655 case GL_LUMINANCE_ALPHA:
1656 case GL_RGBA:
1657 if(colorbufferFormat != GL_RGBA &&
Maxime Grégoire20942c02015-07-16 14:12:47 -04001658 colorbufferFormat != GL_RGBA4 &&
1659 colorbufferFormat != GL_RGB5_A1 &&
1660 colorbufferFormat != GL_RGBA8_EXT)
Nicolas Capens264f1522015-01-09 17:21:17 -05001661 {
1662 return error(GL_INVALID_OPERATION);
1663 }
1664 break;
Nicolas Capens264f1522015-01-09 17:21:17 -05001665 case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
1666 case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
Nicolas Capensa9b49372015-01-30 00:33:26 -05001667 case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
1668 case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
1669 return error(GL_INVALID_OPERATION);
1670 case GL_DEPTH_COMPONENT:
1671 case GL_DEPTH_STENCIL_EXT:
1672 return error(GL_INVALID_OPERATION);
1673 case GL_BGRA_EXT:
1674 if(colorbufferFormat != GL_RGB8)
Nicolas Capens264f1522015-01-09 17:21:17 -05001675 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05001676 UNIMPLEMENTED();
Nicolas Capens264f1522015-01-09 17:21:17 -05001677 return error(GL_INVALID_OPERATION);
1678 }
Nicolas Capensa9b49372015-01-30 00:33:26 -05001679 break;
Nicolas Capens264f1522015-01-09 17:21:17 -05001680 default:
1681 return error(GL_INVALID_ENUM);
1682 }
1683
1684 texture->copySubImage(target, level, xoffset, yoffset, x, y, width, height, framebuffer);
1685 }
1686}
1687
Nicolas Capensa9b49372015-01-30 00:33:26 -05001688GLuint APIENTRY glCreateProgram(void)
Nicolas Capens264f1522015-01-09 17:21:17 -05001689{
1690 TRACE("()");
1691
Nicolas Capensf4486fd2015-01-22 11:10:37 -05001692 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05001693
1694 if(context)
1695 {
1696 return context->createProgram();
1697 }
1698
1699 return 0;
1700}
1701
Nicolas Capensa9b49372015-01-30 00:33:26 -05001702GLuint APIENTRY glCreateShader(GLenum type)
Nicolas Capens264f1522015-01-09 17:21:17 -05001703{
1704 TRACE("(GLenum type = 0x%X)", type);
1705
Nicolas Capensf4486fd2015-01-22 11:10:37 -05001706 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05001707
1708 if(context)
1709 {
1710 switch(type)
1711 {
1712 case GL_FRAGMENT_SHADER:
1713 case GL_VERTEX_SHADER:
1714 return context->createShader(type);
1715 default:
1716 return error(GL_INVALID_ENUM, 0);
1717 }
1718 }
1719
1720 return 0;
1721}
1722
Nicolas Capensa9b49372015-01-30 00:33:26 -05001723void APIENTRY glCullFace(GLenum mode)
Nicolas Capens264f1522015-01-09 17:21:17 -05001724{
1725 TRACE("(GLenum mode = 0x%X)", mode);
1726
1727 switch(mode)
1728 {
1729 case GL_FRONT:
1730 case GL_BACK:
1731 case GL_FRONT_AND_BACK:
Maxime Grégoire20942c02015-07-16 14:12:47 -04001732 {
1733 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05001734
Maxime Grégoire20942c02015-07-16 14:12:47 -04001735 if(context)
1736 {
1737 context->setCullMode(mode);
Nicolas Capens264f1522015-01-09 17:21:17 -05001738 }
Maxime Grégoire20942c02015-07-16 14:12:47 -04001739 }
1740 break;
Nicolas Capens264f1522015-01-09 17:21:17 -05001741 default:
1742 return error(GL_INVALID_ENUM);
1743 }
1744}
1745
Nicolas Capensa9b49372015-01-30 00:33:26 -05001746void APIENTRY glDeleteBuffers(GLsizei n, const GLuint* buffers)
Nicolas Capens264f1522015-01-09 17:21:17 -05001747{
Nicolas Capens4be33702015-04-28 15:13:30 -07001748 TRACE("(GLsizei n = %d, const GLuint* buffers = %p)", n, buffers);
Nicolas Capens264f1522015-01-09 17:21:17 -05001749
1750 if(n < 0)
1751 {
1752 return error(GL_INVALID_VALUE);
1753 }
1754
Nicolas Capensf4486fd2015-01-22 11:10:37 -05001755 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05001756
1757 if(context)
1758 {
1759 for(int i = 0; i < n; i++)
1760 {
1761 context->deleteBuffer(buffers[i]);
1762 }
1763 }
1764}
1765
Nicolas Capensa9b49372015-01-30 00:33:26 -05001766void APIENTRY glDeleteFencesNV(GLsizei n, const GLuint* fences)
Nicolas Capens264f1522015-01-09 17:21:17 -05001767{
Nicolas Capens4be33702015-04-28 15:13:30 -07001768 TRACE("(GLsizei n = %d, const GLuint* fences = %p)", n, fences);
Nicolas Capens264f1522015-01-09 17:21:17 -05001769
1770 if(n < 0)
1771 {
1772 return error(GL_INVALID_VALUE);
1773 }
1774
Nicolas Capensf4486fd2015-01-22 11:10:37 -05001775 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05001776
1777 if(context)
1778 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05001779 if(context->getListIndex() != 0)
1780 {
1781 UNIMPLEMENTED();
1782 }
1783
Nicolas Capens264f1522015-01-09 17:21:17 -05001784 for(int i = 0; i < n; i++)
1785 {
1786 context->deleteFence(fences[i]);
1787 }
1788 }
1789}
1790
Nicolas Capensa9b49372015-01-30 00:33:26 -05001791void APIENTRY glDeleteFramebuffers(GLsizei n, const GLuint* framebuffers)
Nicolas Capens264f1522015-01-09 17:21:17 -05001792{
Nicolas Capens4be33702015-04-28 15:13:30 -07001793 TRACE("(GLsizei n = %d, const GLuint* framebuffers = %p)", n, framebuffers);
Nicolas Capens264f1522015-01-09 17:21:17 -05001794
1795 if(n < 0)
1796 {
1797 return error(GL_INVALID_VALUE);
1798 }
1799
Nicolas Capensf4486fd2015-01-22 11:10:37 -05001800 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05001801
1802 if(context)
1803 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05001804 if(context->getListIndex() != 0)
1805 {
1806 UNIMPLEMENTED();
1807 }
1808
Nicolas Capens264f1522015-01-09 17:21:17 -05001809 for(int i = 0; i < n; i++)
1810 {
1811 if(framebuffers[i] != 0)
1812 {
1813 context->deleteFramebuffer(framebuffers[i]);
1814 }
1815 }
1816 }
1817}
1818
Nicolas Capensa9b49372015-01-30 00:33:26 -05001819void APIENTRY glDeleteProgram(GLuint program)
Nicolas Capens264f1522015-01-09 17:21:17 -05001820{
1821 TRACE("(GLuint program = %d)", program);
1822
1823 if(program == 0)
1824 {
1825 return;
1826 }
1827
Nicolas Capensf4486fd2015-01-22 11:10:37 -05001828 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05001829
1830 if(context)
1831 {
1832 if(!context->getProgram(program))
1833 {
1834 if(context->getShader(program))
1835 {
1836 return error(GL_INVALID_OPERATION);
1837 }
1838 else
1839 {
1840 return error(GL_INVALID_VALUE);
1841 }
1842 }
1843
1844 context->deleteProgram(program);
1845 }
1846}
1847
Nicolas Capensa9b49372015-01-30 00:33:26 -05001848void APIENTRY glDeleteQueriesEXT(GLsizei n, const GLuint *ids)
Nicolas Capens264f1522015-01-09 17:21:17 -05001849{
Nicolas Capens4be33702015-04-28 15:13:30 -07001850 TRACE("(GLsizei n = %d, const GLuint *ids = %p)", n, ids);
Nicolas Capens264f1522015-01-09 17:21:17 -05001851
1852 if(n < 0)
1853 {
1854 return error(GL_INVALID_VALUE);
1855 }
1856
Nicolas Capensf4486fd2015-01-22 11:10:37 -05001857 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05001858
1859 if(context)
1860 {
1861 for(int i = 0; i < n; i++)
1862 {
1863 context->deleteQuery(ids[i]);
1864 }
1865 }
1866}
1867
Nicolas Capensa9b49372015-01-30 00:33:26 -05001868void APIENTRY glDeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers)
Nicolas Capens264f1522015-01-09 17:21:17 -05001869{
Nicolas Capens4be33702015-04-28 15:13:30 -07001870 TRACE("(GLsizei n = %d, const GLuint* renderbuffers = %p)", n, renderbuffers);
Nicolas Capens264f1522015-01-09 17:21:17 -05001871
1872 if(n < 0)
1873 {
1874 return error(GL_INVALID_VALUE);
1875 }
1876
Nicolas Capensf4486fd2015-01-22 11:10:37 -05001877 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05001878
1879 if(context)
1880 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05001881 if(context->getListIndex() != 0)
1882 {
1883 UNIMPLEMENTED();
1884 }
1885
Nicolas Capens264f1522015-01-09 17:21:17 -05001886 for(int i = 0; i < n; i++)
1887 {
1888 context->deleteRenderbuffer(renderbuffers[i]);
1889 }
1890 }
1891}
1892
Nicolas Capensa9b49372015-01-30 00:33:26 -05001893void APIENTRY glDeleteShader(GLuint shader)
Nicolas Capens264f1522015-01-09 17:21:17 -05001894{
1895 TRACE("(GLuint shader = %d)", shader);
1896
1897 if(shader == 0)
1898 {
1899 return;
1900 }
1901
Nicolas Capensf4486fd2015-01-22 11:10:37 -05001902 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05001903
1904 if(context)
1905 {
1906 if(!context->getShader(shader))
1907 {
1908 if(context->getProgram(shader))
1909 {
1910 return error(GL_INVALID_OPERATION);
1911 }
1912 else
1913 {
1914 return error(GL_INVALID_VALUE);
1915 }
1916 }
1917
1918 context->deleteShader(shader);
1919 }
1920}
1921
Nicolas Capensa9b49372015-01-30 00:33:26 -05001922void APIENTRY glDeleteTextures(GLsizei n, const GLuint* textures)
Nicolas Capens264f1522015-01-09 17:21:17 -05001923{
Nicolas Capens4be33702015-04-28 15:13:30 -07001924 TRACE("(GLsizei n = %d, const GLuint* textures = %p)", n, textures);
Nicolas Capens264f1522015-01-09 17:21:17 -05001925
1926 if(n < 0)
1927 {
1928 return error(GL_INVALID_VALUE);
1929 }
1930
Nicolas Capensf4486fd2015-01-22 11:10:37 -05001931 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05001932
1933 if(context)
1934 {
1935 for(int i = 0; i < n; i++)
1936 {
1937 if(textures[i] != 0)
1938 {
1939 context->deleteTexture(textures[i]);
1940 }
1941 }
1942 }
1943}
1944
Nicolas Capensa9b49372015-01-30 00:33:26 -05001945void APIENTRY glDepthFunc(GLenum func)
Nicolas Capens264f1522015-01-09 17:21:17 -05001946{
1947 TRACE("(GLenum func = 0x%X)", func);
1948
1949 switch(func)
1950 {
1951 case GL_NEVER:
1952 case GL_ALWAYS:
1953 case GL_LESS:
1954 case GL_LEQUAL:
1955 case GL_EQUAL:
1956 case GL_GREATER:
1957 case GL_GEQUAL:
1958 case GL_NOTEQUAL:
1959 break;
1960 default:
1961 return error(GL_INVALID_ENUM);
1962 }
1963
Nicolas Capensf4486fd2015-01-22 11:10:37 -05001964 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05001965
1966 if(context)
1967 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05001968 if(context->getListIndex() != 0)
1969 {
1970 UNIMPLEMENTED();
1971 }
1972
Nicolas Capens264f1522015-01-09 17:21:17 -05001973 context->setDepthFunc(func);
1974 }
1975}
1976
Nicolas Capensa9b49372015-01-30 00:33:26 -05001977void APIENTRY glDepthMask(GLboolean flag)
Nicolas Capens264f1522015-01-09 17:21:17 -05001978{
1979 TRACE("(GLboolean flag = %d)", flag);
1980
Nicolas Capensf4486fd2015-01-22 11:10:37 -05001981 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05001982
1983 if(context)
1984 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05001985 if(context->getListIndex() != 0)
1986 {
1987 UNIMPLEMENTED();
1988 }
1989
Nicolas Capens264f1522015-01-09 17:21:17 -05001990 context->setDepthMask(flag != GL_FALSE);
1991 }
1992}
1993
Nicolas Capensa9b49372015-01-30 00:33:26 -05001994void APIENTRY glDepthRangef(GLclampf zNear, GLclampf zFar)
Nicolas Capens264f1522015-01-09 17:21:17 -05001995{
1996 TRACE("(GLclampf zNear = %f, GLclampf zFar = %f)", zNear, zFar);
1997
Nicolas Capensf4486fd2015-01-22 11:10:37 -05001998 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05001999
2000 if(context)
2001 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05002002 if(context->getListIndex() != 0)
2003 {
2004 UNIMPLEMENTED();
2005 }
2006
Nicolas Capens264f1522015-01-09 17:21:17 -05002007 context->setDepthRange(zNear, zFar);
2008 }
2009}
2010
Nicolas Capensa9b49372015-01-30 00:33:26 -05002011void APIENTRY glDetachShader(GLuint program, GLuint shader)
Nicolas Capens264f1522015-01-09 17:21:17 -05002012{
2013 TRACE("(GLuint program = %d, GLuint shader = %d)", program, shader);
2014
Nicolas Capensf4486fd2015-01-22 11:10:37 -05002015 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05002016
2017 if(context)
2018 {
Nicolas Capensf4486fd2015-01-22 11:10:37 -05002019 gl::Program *programObject = context->getProgram(program);
2020 gl::Shader *shaderObject = context->getShader(shader);
Nicolas Capens264f1522015-01-09 17:21:17 -05002021
2022 if(!programObject)
2023 {
Nicolas Capensf4486fd2015-01-22 11:10:37 -05002024 gl::Shader *shaderByProgramHandle;
Nicolas Capens264f1522015-01-09 17:21:17 -05002025 shaderByProgramHandle = context->getShader(program);
2026 if(!shaderByProgramHandle)
2027 {
2028 return error(GL_INVALID_VALUE);
2029 }
2030 else
2031 {
2032 return error(GL_INVALID_OPERATION);
2033 }
2034 }
2035
2036 if(!shaderObject)
2037 {
Nicolas Capensf4486fd2015-01-22 11:10:37 -05002038 gl::Program *programByShaderHandle = context->getProgram(shader);
Nicolas Capens264f1522015-01-09 17:21:17 -05002039 if(!programByShaderHandle)
2040 {
2041 return error(GL_INVALID_VALUE);
2042 }
2043 else
2044 {
2045 return error(GL_INVALID_OPERATION);
2046 }
2047 }
2048
2049 if(!programObject->detachShader(shaderObject))
2050 {
2051 return error(GL_INVALID_OPERATION);
2052 }
2053 }
2054}
2055
Nicolas Capensa9b49372015-01-30 00:33:26 -05002056void APIENTRY glDisable(GLenum cap)
Nicolas Capens264f1522015-01-09 17:21:17 -05002057{
2058 TRACE("(GLenum cap = 0x%X)", cap);
2059
Nicolas Capensf4486fd2015-01-22 11:10:37 -05002060 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05002061
2062 if(context)
2063 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05002064 if(context->getListIndex() != 0)
2065 {
2066 UNIMPLEMENTED();
2067 }
2068
Nicolas Capens264f1522015-01-09 17:21:17 -05002069 switch(cap)
2070 {
Maxime Grégoire20942c02015-07-16 14:12:47 -04002071 case GL_CULL_FACE: context->setCullFace(false); break;
2072 case GL_POLYGON_OFFSET_FILL: context->setPolygonOffsetFill(false); break;
2073 case GL_SAMPLE_ALPHA_TO_COVERAGE: context->setSampleAlphaToCoverage(false); break;
2074 case GL_SAMPLE_COVERAGE: context->setSampleCoverage(false); break;
2075 case GL_SCISSOR_TEST: context->setScissorTest(false); break;
2076 case GL_STENCIL_TEST: context->setStencilTest(false); break;
2077 case GL_DEPTH_TEST: context->setDepthTest(false); break;
2078 case GL_BLEND: context->setBlend(false); break;
2079 case GL_DITHER: context->setDither(false); break;
2080 case GL_LIGHTING: context->setLighting(false); break;
2081 case GL_FOG: context->setFog(false); break;
2082 case GL_ALPHA_TEST: context->setAlphaTest(false); break;
2083 case GL_TEXTURE_2D: context->setTexture2D(false); break;
2084 case GL_LIGHT0: context->setLight(0, false); break;
2085 case GL_LIGHT1: context->setLight(1, false); break;
2086 case GL_LIGHT2: context->setLight(2, false); break;
2087 case GL_LIGHT3: context->setLight(3, false); break;
2088 case GL_LIGHT4: context->setLight(4, false); break;
2089 case GL_LIGHT5: context->setLight(5, false); break;
2090 case GL_LIGHT6: context->setLight(6, false); break;
2091 case GL_LIGHT7: context->setLight(7, false); break;
2092 case GL_COLOR_MATERIAL: context->setColorMaterial(false); break;
2093 case GL_RESCALE_NORMAL: context->setNormalizeNormals(false); break;
2094 case GL_TEXTURE_1D: context->set1DTextureEnable(false); break;
Nicolas Capens264f1522015-01-09 17:21:17 -05002095 default:
2096 return error(GL_INVALID_ENUM);
2097 }
2098 }
2099}
2100
Nicolas Capensa9b49372015-01-30 00:33:26 -05002101void APIENTRY glDisableVertexAttribArray(GLuint index)
Nicolas Capens264f1522015-01-09 17:21:17 -05002102{
2103 TRACE("(GLuint index = %d)", index);
2104
Nicolas Capensf4486fd2015-01-22 11:10:37 -05002105 if(index >= gl::MAX_VERTEX_ATTRIBS)
Nicolas Capens264f1522015-01-09 17:21:17 -05002106 {
2107 return error(GL_INVALID_VALUE);
2108 }
2109
Nicolas Capensf4486fd2015-01-22 11:10:37 -05002110 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05002111
2112 if(context)
2113 {
2114 context->setEnableVertexAttribArray(index, false);
2115 }
2116}
2117
Nicolas Capensa9b49372015-01-30 00:33:26 -05002118void APIENTRY glCaptureAttribs()
2119{
2120 TRACE("()");
2121
2122 gl::Context *context = gl::getContext();
2123
2124 if(context)
2125 {
2126 context->captureAttribs();
2127 }
2128}
2129
2130void APIENTRY glRestoreAttribs()
2131{
2132 TRACE("()");
2133
2134 gl::Context *context = gl::getContext();
2135
2136 if(context)
2137 {
2138 context->restoreAttribs();
2139 }
2140}
2141
2142void APIENTRY glDrawArrays(GLenum mode, GLint first, GLsizei count)
Nicolas Capens264f1522015-01-09 17:21:17 -05002143{
2144 TRACE("(GLenum mode = 0x%X, GLint first = %d, GLsizei count = %d)", mode, first, count);
2145
2146 if(count < 0 || first < 0)
2147 {
2148 return error(GL_INVALID_VALUE);
2149 }
2150
Nicolas Capensf4486fd2015-01-22 11:10:37 -05002151 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05002152
2153 if(context)
2154 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05002155 if(context->getListIndex() != 0)
2156 {
2157 ASSERT(context->getListMode() != GL_COMPILE_AND_EXECUTE); // UNIMPLEMENTED!
2158
2159 context->listCommand(gl::newCommand(glCaptureAttribs));
2160 context->captureDrawArrays(mode, first, count);
2161 context->listCommand(gl::newCommand(glDrawArrays, mode, first, count));
2162 context->listCommand(gl::newCommand(glRestoreAttribs));
2163
2164 return;
2165 }
2166
Nicolas Capens264f1522015-01-09 17:21:17 -05002167 context->drawArrays(mode, first, count);
2168 }
2169}
2170
Nicolas Capensa9b49372015-01-30 00:33:26 -05002171void APIENTRY glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices)
Nicolas Capens264f1522015-01-09 17:21:17 -05002172{
Nicolas Capens4be33702015-04-28 15:13:30 -07002173 TRACE("(GLenum mode = 0x%X, GLsizei count = %d, GLenum type = 0x%X, const GLvoid* indices = %p)",
Maxime Grégoire20942c02015-07-16 14:12:47 -04002174 mode, count, type, indices);
Nicolas Capens264f1522015-01-09 17:21:17 -05002175
2176 if(count < 0)
2177 {
2178 return error(GL_INVALID_VALUE);
2179 }
2180
Nicolas Capensf4486fd2015-01-22 11:10:37 -05002181 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05002182
2183 if(context)
2184 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05002185 if(context->getListIndex() != 0)
2186 {
2187 UNIMPLEMENTED();
2188 }
2189
Nicolas Capens264f1522015-01-09 17:21:17 -05002190 switch(type)
2191 {
2192 case GL_UNSIGNED_BYTE:
2193 case GL_UNSIGNED_SHORT:
2194 case GL_UNSIGNED_INT:
2195 break;
2196 default:
2197 return error(GL_INVALID_ENUM);
2198 }
2199
2200 context->drawElements(mode, count, type, indices);
2201 }
2202}
2203
Nicolas Capensa9b49372015-01-30 00:33:26 -05002204void APIENTRY glEnable(GLenum cap)
Nicolas Capens264f1522015-01-09 17:21:17 -05002205{
2206 TRACE("(GLenum cap = 0x%X)", cap);
2207
Nicolas Capensf4486fd2015-01-22 11:10:37 -05002208 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05002209
2210 if(context)
2211 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05002212 if(context->getListIndex() != 0)
2213 {
2214 UNIMPLEMENTED();
2215 }
2216
Nicolas Capens264f1522015-01-09 17:21:17 -05002217 switch(cap)
2218 {
2219 case GL_CULL_FACE: context->setCullFace(true); break;
2220 case GL_POLYGON_OFFSET_FILL: context->setPolygonOffsetFill(true); break;
2221 case GL_SAMPLE_ALPHA_TO_COVERAGE: context->setSampleAlphaToCoverage(true); break;
2222 case GL_SAMPLE_COVERAGE: context->setSampleCoverage(true); break;
2223 case GL_SCISSOR_TEST: context->setScissorTest(true); break;
2224 case GL_STENCIL_TEST: context->setStencilTest(true); break;
2225 case GL_DEPTH_TEST: context->setDepthTest(true); break;
2226 case GL_BLEND: context->setBlend(true); break;
2227 case GL_DITHER: context->setDither(true); break;
Nicolas Capensa9b49372015-01-30 00:33:26 -05002228 case GL_TEXTURE_2D: context->setTexture2D(true); break;
2229 case GL_ALPHA_TEST: context->setAlphaTest(true); break;
2230 case GL_COLOR_MATERIAL: context->setColorMaterial(true); break;
2231 case GL_FOG: context->setFog(true); break;
2232 case GL_LIGHTING: context->setLighting(true); break;
2233 case GL_LIGHT0: context->setLight(0, true); break;
2234 case GL_LIGHT1: context->setLight(1, true); break;
2235 case GL_LIGHT2: context->setLight(2, true); break;
2236 case GL_LIGHT3: context->setLight(3, true); break;
2237 case GL_LIGHT4: context->setLight(4, true); break;
2238 case GL_LIGHT5: context->setLight(5, true); break;
2239 case GL_LIGHT6: context->setLight(6, true); break;
2240 case GL_LIGHT7: context->setLight(7, true); break;
2241 case GL_RESCALE_NORMAL: context->setNormalizeNormals(true); break;
Maxime Grégoire20942c02015-07-16 14:12:47 -04002242 case GL_TEXTURE_1D: context->set1DTextureEnable(true); break;
Nicolas Capens264f1522015-01-09 17:21:17 -05002243 default:
2244 return error(GL_INVALID_ENUM);
2245 }
2246 }
2247}
2248
Nicolas Capensa9b49372015-01-30 00:33:26 -05002249void APIENTRY glEnableVertexAttribArray(GLuint index)
Nicolas Capens264f1522015-01-09 17:21:17 -05002250{
2251 TRACE("(GLuint index = %d)", index);
2252
Nicolas Capensf4486fd2015-01-22 11:10:37 -05002253 if(index >= gl::MAX_VERTEX_ATTRIBS)
Nicolas Capens264f1522015-01-09 17:21:17 -05002254 {
2255 return error(GL_INVALID_VALUE);
2256 }
2257
Nicolas Capensf4486fd2015-01-22 11:10:37 -05002258 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05002259
2260 if(context)
2261 {
2262 context->setEnableVertexAttribArray(index, true);
2263 }
2264}
2265
Nicolas Capensa9b49372015-01-30 00:33:26 -05002266void APIENTRY glEndQueryEXT(GLenum target)
Nicolas Capens264f1522015-01-09 17:21:17 -05002267{
2268 TRACE("GLenum target = 0x%X)", target);
2269
2270 switch(target)
2271 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05002272 case GL_ANY_SAMPLES_PASSED:
2273 case GL_ANY_SAMPLES_PASSED_CONSERVATIVE:
Nicolas Capens264f1522015-01-09 17:21:17 -05002274 break;
2275 default:
2276 return error(GL_INVALID_ENUM);
2277 }
2278
Nicolas Capensf4486fd2015-01-22 11:10:37 -05002279 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05002280
2281 if(context)
2282 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05002283 if(context->getListIndex() != 0)
2284 {
2285 UNIMPLEMENTED();
2286 }
2287
Nicolas Capens264f1522015-01-09 17:21:17 -05002288 context->endQuery(target);
2289 }
2290}
2291
Nicolas Capensa9b49372015-01-30 00:33:26 -05002292void APIENTRY glFinishFenceNV(GLuint fence)
Nicolas Capens264f1522015-01-09 17:21:17 -05002293{
2294 TRACE("(GLuint fence = %d)", fence);
2295
Nicolas Capensf4486fd2015-01-22 11:10:37 -05002296 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05002297
2298 if(context)
2299 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05002300 if(context->getListIndex() != 0)
2301 {
2302 UNIMPLEMENTED();
2303 }
2304
Nicolas Capensf4486fd2015-01-22 11:10:37 -05002305 gl::Fence* fenceObject = context->getFence(fence);
Nicolas Capens264f1522015-01-09 17:21:17 -05002306
2307 if(fenceObject == NULL)
2308 {
2309 return error(GL_INVALID_OPERATION);
2310 }
2311
2312 fenceObject->finishFence();
2313 }
2314}
2315
Nicolas Capensa9b49372015-01-30 00:33:26 -05002316void APIENTRY glFinish(void)
Nicolas Capens264f1522015-01-09 17:21:17 -05002317{
2318 TRACE("()");
2319
Nicolas Capensf4486fd2015-01-22 11:10:37 -05002320 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05002321
2322 if(context)
2323 {
2324 context->finish();
2325 }
2326}
2327
Nicolas Capensa9b49372015-01-30 00:33:26 -05002328void APIENTRY glFlush(void)
Nicolas Capens264f1522015-01-09 17:21:17 -05002329{
2330 TRACE("()");
2331
Nicolas Capensf4486fd2015-01-22 11:10:37 -05002332 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05002333
2334 if(context)
2335 {
2336 context->flush();
2337 }
2338}
2339
Nicolas Capensa9b49372015-01-30 00:33:26 -05002340void APIENTRY glFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
Nicolas Capens264f1522015-01-09 17:21:17 -05002341{
2342 TRACE("(GLenum target = 0x%X, GLenum attachment = 0x%X, GLenum renderbuffertarget = 0x%X, "
Maxime Grégoire20942c02015-07-16 14:12:47 -04002343 "GLuint renderbuffer = %d)", target, attachment, renderbuffertarget, renderbuffer);
Nicolas Capens264f1522015-01-09 17:21:17 -05002344
Nicolas Capensa9b49372015-01-30 00:33:26 -05002345 if((target != GL_FRAMEBUFFER && target != GL_DRAW_FRAMEBUFFER_EXT && target != GL_READ_FRAMEBUFFER_EXT) ||
Maxime Grégoire20942c02015-07-16 14:12:47 -04002346 (renderbuffertarget != GL_RENDERBUFFER && renderbuffer != 0))
Nicolas Capens264f1522015-01-09 17:21:17 -05002347 {
2348 return error(GL_INVALID_ENUM);
2349 }
2350
Nicolas Capensf4486fd2015-01-22 11:10:37 -05002351 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05002352
2353 if(context)
2354 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05002355 if(context->getListIndex() != 0)
2356 {
2357 UNIMPLEMENTED();
2358 }
2359
Nicolas Capensf4486fd2015-01-22 11:10:37 -05002360 gl::Framebuffer *framebuffer = NULL;
Nicolas Capens7cc75e12015-01-29 14:44:24 -05002361 GLuint framebufferName = 0;
Nicolas Capensa9b49372015-01-30 00:33:26 -05002362 if(target == GL_READ_FRAMEBUFFER_EXT)
Nicolas Capens264f1522015-01-09 17:21:17 -05002363 {
2364 framebuffer = context->getReadFramebuffer();
Nicolas Capens7cc75e12015-01-29 14:44:24 -05002365 framebufferName = context->getReadFramebufferName();
Nicolas Capens264f1522015-01-09 17:21:17 -05002366 }
2367 else
2368 {
2369 framebuffer = context->getDrawFramebuffer();
Nicolas Capens7cc75e12015-01-29 14:44:24 -05002370 framebufferName = context->getDrawFramebufferName();
Nicolas Capens264f1522015-01-09 17:21:17 -05002371 }
2372
Nicolas Capens7cc75e12015-01-29 14:44:24 -05002373 if(!framebuffer || (framebufferName == 0 && renderbuffer != 0))
Nicolas Capens264f1522015-01-09 17:21:17 -05002374 {
2375 return error(GL_INVALID_OPERATION);
2376 }
2377
2378 switch(attachment)
2379 {
2380 case GL_COLOR_ATTACHMENT0:
2381 framebuffer->setColorbuffer(GL_RENDERBUFFER, renderbuffer);
2382 break;
2383 case GL_DEPTH_ATTACHMENT:
2384 framebuffer->setDepthbuffer(GL_RENDERBUFFER, renderbuffer);
2385 break;
2386 case GL_STENCIL_ATTACHMENT:
2387 framebuffer->setStencilbuffer(GL_RENDERBUFFER, renderbuffer);
2388 break;
2389 default:
2390 return error(GL_INVALID_ENUM);
2391 }
2392 }
2393}
2394
Nicolas Capensa9b49372015-01-30 00:33:26 -05002395void APIENTRY glFramebufferTexture1D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
2396{
2397 UNIMPLEMENTED();
2398}
2399
2400void APIENTRY glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
Nicolas Capens264f1522015-01-09 17:21:17 -05002401{
2402 TRACE("(GLenum target = 0x%X, GLenum attachment = 0x%X, GLenum textarget = 0x%X, "
Maxime Grégoire20942c02015-07-16 14:12:47 -04002403 "GLuint texture = %d, GLint level = %d)", target, attachment, textarget, texture, level);
Nicolas Capens264f1522015-01-09 17:21:17 -05002404
Nicolas Capensa9b49372015-01-30 00:33:26 -05002405 if(target != GL_FRAMEBUFFER && target != GL_DRAW_FRAMEBUFFER_EXT && target != GL_READ_FRAMEBUFFER_EXT)
Nicolas Capens264f1522015-01-09 17:21:17 -05002406 {
2407 return error(GL_INVALID_ENUM);
2408 }
2409
2410 switch(attachment)
2411 {
2412 case GL_COLOR_ATTACHMENT0:
2413 case GL_DEPTH_ATTACHMENT:
2414 case GL_STENCIL_ATTACHMENT:
2415 break;
2416 default:
2417 return error(GL_INVALID_ENUM);
2418 }
2419
Nicolas Capensf4486fd2015-01-22 11:10:37 -05002420 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05002421
2422 if(context)
2423 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05002424 if(context->getListIndex() != 0)
2425 {
2426 UNIMPLEMENTED();
2427 }
2428
Nicolas Capens264f1522015-01-09 17:21:17 -05002429 if(texture == 0)
2430 {
2431 textarget = GL_NONE;
2432 }
2433 else
2434 {
Nicolas Capensf4486fd2015-01-22 11:10:37 -05002435 gl::Texture *tex = context->getTexture(texture);
Nicolas Capens264f1522015-01-09 17:21:17 -05002436
2437 if(tex == NULL)
2438 {
2439 return error(GL_INVALID_OPERATION);
2440 }
2441
2442 if(tex->isCompressed(textarget, level))
2443 {
2444 return error(GL_INVALID_OPERATION);
2445 }
2446
2447 switch(textarget)
2448 {
2449 case GL_TEXTURE_2D:
2450 if(tex->getTarget() != GL_TEXTURE_2D)
2451 {
2452 return error(GL_INVALID_OPERATION);
2453 }
2454 break;
2455 case GL_TEXTURE_CUBE_MAP_POSITIVE_X:
2456 case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:
2457 case GL_TEXTURE_CUBE_MAP_POSITIVE_Y:
2458 case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y:
2459 case GL_TEXTURE_CUBE_MAP_POSITIVE_Z:
2460 case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:
2461 if(tex->getTarget() != GL_TEXTURE_CUBE_MAP)
2462 {
2463 return error(GL_INVALID_OPERATION);
2464 }
2465 break;
2466 default:
2467 return error(GL_INVALID_ENUM);
2468 }
2469
2470 if(level != 0)
2471 {
2472 return error(GL_INVALID_VALUE);
2473 }
2474 }
2475
Nicolas Capensf4486fd2015-01-22 11:10:37 -05002476 gl::Framebuffer *framebuffer = NULL;
Nicolas Capens7cc75e12015-01-29 14:44:24 -05002477 GLuint framebufferName = 0;
Nicolas Capensa9b49372015-01-30 00:33:26 -05002478 if(target == GL_READ_FRAMEBUFFER_EXT)
Nicolas Capens264f1522015-01-09 17:21:17 -05002479 {
2480 framebuffer = context->getReadFramebuffer();
Nicolas Capens7cc75e12015-01-29 14:44:24 -05002481 framebufferName = context->getReadFramebufferName();
Nicolas Capens264f1522015-01-09 17:21:17 -05002482 }
2483 else
2484 {
2485 framebuffer = context->getDrawFramebuffer();
Nicolas Capens7cc75e12015-01-29 14:44:24 -05002486 framebufferName = context->getDrawFramebufferName();
Nicolas Capens264f1522015-01-09 17:21:17 -05002487 }
2488
Nicolas Capens7cc75e12015-01-29 14:44:24 -05002489 if(framebufferName == 0 || !framebuffer)
Nicolas Capens264f1522015-01-09 17:21:17 -05002490 {
2491 return error(GL_INVALID_OPERATION);
2492 }
2493
2494 switch(attachment)
2495 {
2496 case GL_COLOR_ATTACHMENT0: framebuffer->setColorbuffer(textarget, texture); break;
2497 case GL_DEPTH_ATTACHMENT: framebuffer->setDepthbuffer(textarget, texture); break;
2498 case GL_STENCIL_ATTACHMENT: framebuffer->setStencilbuffer(textarget, texture); break;
2499 }
2500 }
2501}
2502
Nicolas Capensa9b49372015-01-30 00:33:26 -05002503void APIENTRY glFramebufferTexture3D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset)
2504{
2505 UNIMPLEMENTED();
2506}
2507
2508void APIENTRY glFrontFace(GLenum mode)
Nicolas Capens264f1522015-01-09 17:21:17 -05002509{
2510 TRACE("(GLenum mode = 0x%X)", mode);
2511
2512 switch(mode)
2513 {
2514 case GL_CW:
2515 case GL_CCW:
Maxime Grégoire20942c02015-07-16 14:12:47 -04002516 {
2517 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05002518
Maxime Grégoire20942c02015-07-16 14:12:47 -04002519 if(context)
2520 {
2521 context->setFrontFace(mode);
Nicolas Capens264f1522015-01-09 17:21:17 -05002522 }
Maxime Grégoire20942c02015-07-16 14:12:47 -04002523 }
2524 break;
Nicolas Capens264f1522015-01-09 17:21:17 -05002525 default:
2526 return error(GL_INVALID_ENUM);
2527 }
2528}
2529
Nicolas Capensa9b49372015-01-30 00:33:26 -05002530void APIENTRY glGenBuffers(GLsizei n, GLuint* buffers)
Nicolas Capens264f1522015-01-09 17:21:17 -05002531{
Nicolas Capens4be33702015-04-28 15:13:30 -07002532 TRACE("(GLsizei n = %d, GLuint* buffers = %p)", n, buffers);
Nicolas Capens264f1522015-01-09 17:21:17 -05002533
2534 if(n < 0)
2535 {
2536 return error(GL_INVALID_VALUE);
2537 }
2538
Nicolas Capensf4486fd2015-01-22 11:10:37 -05002539 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05002540
2541 if(context)
2542 {
2543 for(int i = 0; i < n; i++)
2544 {
2545 buffers[i] = context->createBuffer();
2546 }
2547 }
2548}
2549
Nicolas Capensa9b49372015-01-30 00:33:26 -05002550void APIENTRY glGenerateMipmap(GLenum target)
Nicolas Capens264f1522015-01-09 17:21:17 -05002551{
2552 TRACE("(GLenum target = 0x%X)", target);
2553
Nicolas Capensf4486fd2015-01-22 11:10:37 -05002554 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05002555
2556 if(context)
2557 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05002558 if(context->getListIndex() != 0)
2559 {
2560 UNIMPLEMENTED();
2561 }
2562
Nicolas Capensf4486fd2015-01-22 11:10:37 -05002563 gl::Texture *texture;
Nicolas Capens264f1522015-01-09 17:21:17 -05002564
2565 switch(target)
2566 {
2567 case GL_TEXTURE_2D:
Nicolas Capensa9b49372015-01-30 00:33:26 -05002568 texture = context->getTexture2D(target);
Nicolas Capens264f1522015-01-09 17:21:17 -05002569 break;
2570 case GL_TEXTURE_CUBE_MAP:
2571 texture = context->getTextureCubeMap();
2572 break;
2573 default:
2574 return error(GL_INVALID_ENUM);
2575 }
2576
2577 if(texture->isCompressed(target, 0) || texture->isDepth(target, 0))
2578 {
2579 return error(GL_INVALID_OPERATION);
2580 }
2581
2582 texture->generateMipmaps();
2583 }
2584}
2585
Nicolas Capensa9b49372015-01-30 00:33:26 -05002586void APIENTRY glGenFencesNV(GLsizei n, GLuint* fences)
Nicolas Capens264f1522015-01-09 17:21:17 -05002587{
Nicolas Capens4be33702015-04-28 15:13:30 -07002588 TRACE("(GLsizei n = %d, GLuint* fences = %p)", n, fences);
Nicolas Capens264f1522015-01-09 17:21:17 -05002589
2590 if(n < 0)
2591 {
2592 return error(GL_INVALID_VALUE);
2593 }
2594
Nicolas Capensf4486fd2015-01-22 11:10:37 -05002595 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05002596
2597 if(context)
2598 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05002599 if(context->getListIndex() != 0)
2600 {
2601 UNIMPLEMENTED();
2602 }
2603
Nicolas Capens264f1522015-01-09 17:21:17 -05002604 for(int i = 0; i < n; i++)
2605 {
2606 fences[i] = context->createFence();
2607 }
2608 }
2609}
2610
Nicolas Capensa9b49372015-01-30 00:33:26 -05002611void APIENTRY glGenFramebuffers(GLsizei n, GLuint* framebuffers)
Nicolas Capens264f1522015-01-09 17:21:17 -05002612{
Nicolas Capens4be33702015-04-28 15:13:30 -07002613 TRACE("(GLsizei n = %d, GLuint* framebuffers = %p)", n, framebuffers);
Nicolas Capens264f1522015-01-09 17:21:17 -05002614
2615 if(n < 0)
2616 {
2617 return error(GL_INVALID_VALUE);
2618 }
2619
Nicolas Capensf4486fd2015-01-22 11:10:37 -05002620 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05002621
2622 if(context)
2623 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05002624 if(context->getListIndex() != 0)
2625 {
2626 UNIMPLEMENTED();
2627 }
2628
Nicolas Capens264f1522015-01-09 17:21:17 -05002629 for(int i = 0; i < n; i++)
2630 {
2631 framebuffers[i] = context->createFramebuffer();
2632 }
2633 }
2634}
2635
Nicolas Capensa9b49372015-01-30 00:33:26 -05002636void APIENTRY glGenQueriesEXT(GLsizei n, GLuint* ids)
Nicolas Capens264f1522015-01-09 17:21:17 -05002637{
Nicolas Capens4be33702015-04-28 15:13:30 -07002638 TRACE("(GLsizei n = %d, GLuint* ids = %p)", n, ids);
Nicolas Capens264f1522015-01-09 17:21:17 -05002639
2640 if(n < 0)
2641 {
2642 return error(GL_INVALID_VALUE);
2643 }
2644
Nicolas Capensf4486fd2015-01-22 11:10:37 -05002645 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05002646
2647 if(context)
2648 {
2649 for(int i = 0; i < n; i++)
2650 {
2651 ids[i] = context->createQuery();
2652 }
2653 }
2654}
2655
Nicolas Capensa9b49372015-01-30 00:33:26 -05002656void APIENTRY glGenRenderbuffers(GLsizei n, GLuint* renderbuffers)
Nicolas Capens264f1522015-01-09 17:21:17 -05002657{
Nicolas Capens4be33702015-04-28 15:13:30 -07002658 TRACE("(GLsizei n = %d, GLuint* renderbuffers = %p)", n, renderbuffers);
Nicolas Capens264f1522015-01-09 17:21:17 -05002659
2660 if(n < 0)
2661 {
2662 return error(GL_INVALID_VALUE);
2663 }
2664
Nicolas Capensf4486fd2015-01-22 11:10:37 -05002665 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05002666
2667 if(context)
2668 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05002669 if(context->getListIndex() != 0)
2670 {
2671 UNIMPLEMENTED();
2672 }
2673
Nicolas Capens264f1522015-01-09 17:21:17 -05002674 for(int i = 0; i < n; i++)
2675 {
2676 renderbuffers[i] = context->createRenderbuffer();
2677 }
2678 }
2679}
2680
Nicolas Capensa9b49372015-01-30 00:33:26 -05002681void APIENTRY glGenTextures(GLsizei n, GLuint* textures)
Nicolas Capens264f1522015-01-09 17:21:17 -05002682{
Nicolas Capens4be33702015-04-28 15:13:30 -07002683 TRACE("(GLsizei n = %d, GLuint* textures = %p)", n, textures);
Nicolas Capens264f1522015-01-09 17:21:17 -05002684
2685 if(n < 0)
2686 {
2687 return error(GL_INVALID_VALUE);
2688 }
2689
Nicolas Capensf4486fd2015-01-22 11:10:37 -05002690 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05002691
2692 if(context)
2693 {
2694 for(int i = 0; i < n; i++)
2695 {
2696 textures[i] = context->createTexture();
2697 }
2698 }
2699}
2700
Nicolas Capensa9b49372015-01-30 00:33:26 -05002701void APIENTRY glGetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, GLchar *name)
Nicolas Capens264f1522015-01-09 17:21:17 -05002702{
Nicolas Capens4be33702015-04-28 15:13:30 -07002703 TRACE("(GLuint program = %d, GLuint index = %d, GLsizei bufsize = %d, GLsizei *length = %p, "
Maxime Grégoire20942c02015-07-16 14:12:47 -04002704 "GLint *size = %p, GLenum *type = %p, GLchar *name = %p)",
2705 program, index, bufsize, length, size, type, name);
Nicolas Capens264f1522015-01-09 17:21:17 -05002706
2707 if(bufsize < 0)
2708 {
2709 return error(GL_INVALID_VALUE);
2710 }
2711
Nicolas Capensf4486fd2015-01-22 11:10:37 -05002712 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05002713
2714 if(context)
2715 {
Nicolas Capensf4486fd2015-01-22 11:10:37 -05002716 gl::Program *programObject = context->getProgram(program);
Nicolas Capens264f1522015-01-09 17:21:17 -05002717
2718 if(!programObject)
2719 {
2720 if(context->getShader(program))
2721 {
2722 return error(GL_INVALID_OPERATION);
2723 }
2724 else
2725 {
2726 return error(GL_INVALID_VALUE);
2727 }
2728 }
2729
2730 if(index >= (GLuint)programObject->getActiveAttributeCount())
2731 {
2732 return error(GL_INVALID_VALUE);
2733 }
2734
2735 programObject->getActiveAttribute(index, bufsize, length, size, type, name);
2736 }
2737}
2738
Nicolas Capensa9b49372015-01-30 00:33:26 -05002739void APIENTRY glGetActiveUniform(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name)
Nicolas Capens264f1522015-01-09 17:21:17 -05002740{
2741 TRACE("(GLuint program = %d, GLuint index = %d, GLsizei bufsize = %d, "
Maxime Grégoire20942c02015-07-16 14:12:47 -04002742 "GLsizei* length = %p, GLint* size = %p, GLenum* type = %p, GLchar* name = %s)",
2743 program, index, bufsize, length, size, type, name);
Nicolas Capens264f1522015-01-09 17:21:17 -05002744
2745 if(bufsize < 0)
2746 {
2747 return error(GL_INVALID_VALUE);
2748 }
2749
Nicolas Capensf4486fd2015-01-22 11:10:37 -05002750 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05002751
2752 if(context)
2753 {
Nicolas Capensf4486fd2015-01-22 11:10:37 -05002754 gl::Program *programObject = context->getProgram(program);
Nicolas Capens264f1522015-01-09 17:21:17 -05002755
2756 if(!programObject)
2757 {
2758 if(context->getShader(program))
2759 {
2760 return error(GL_INVALID_OPERATION);
2761 }
2762 else
2763 {
2764 return error(GL_INVALID_VALUE);
2765 }
2766 }
2767
2768 if(index >= (GLuint)programObject->getActiveUniformCount())
2769 {
2770 return error(GL_INVALID_VALUE);
2771 }
2772
2773 programObject->getActiveUniform(index, bufsize, length, size, type, name);
2774 }
2775}
2776
Nicolas Capensa9b49372015-01-30 00:33:26 -05002777void APIENTRY glGetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders)
Nicolas Capens264f1522015-01-09 17:21:17 -05002778{
Nicolas Capens4be33702015-04-28 15:13:30 -07002779 TRACE("(GLuint program = %d, GLsizei maxcount = %d, GLsizei* count = %p, GLuint* shaders = %p)",
Maxime Grégoire20942c02015-07-16 14:12:47 -04002780 program, maxcount, count, shaders);
Nicolas Capens264f1522015-01-09 17:21:17 -05002781
2782 if(maxcount < 0)
2783 {
2784 return error(GL_INVALID_VALUE);
2785 }
2786
Nicolas Capensf4486fd2015-01-22 11:10:37 -05002787 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05002788
2789 if(context)
2790 {
Nicolas Capensf4486fd2015-01-22 11:10:37 -05002791 gl::Program *programObject = context->getProgram(program);
Nicolas Capens264f1522015-01-09 17:21:17 -05002792
2793 if(!programObject)
2794 {
2795 if(context->getShader(program))
2796 {
2797 return error(GL_INVALID_OPERATION);
2798 }
2799 else
2800 {
2801 return error(GL_INVALID_VALUE);
2802 }
2803 }
2804
2805 return programObject->getAttachedShaders(maxcount, count, shaders);
2806 }
2807}
2808
Nicolas Capensa9b49372015-01-30 00:33:26 -05002809int APIENTRY glGetAttribLocation(GLuint program, const GLchar* name)
Nicolas Capens264f1522015-01-09 17:21:17 -05002810{
2811 TRACE("(GLuint program = %d, const GLchar* name = %s)", program, name);
2812
Nicolas Capensf4486fd2015-01-22 11:10:37 -05002813 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05002814
2815 if(context)
2816 {
Nicolas Capensf4486fd2015-01-22 11:10:37 -05002817 gl::Program *programObject = context->getProgram(program);
Nicolas Capens264f1522015-01-09 17:21:17 -05002818
2819 if(!programObject)
2820 {
2821 if(context->getShader(program))
2822 {
2823 return error(GL_INVALID_OPERATION, -1);
2824 }
2825 else
2826 {
2827 return error(GL_INVALID_VALUE, -1);
2828 }
2829 }
2830
2831 if(!programObject->isLinked())
2832 {
2833 return error(GL_INVALID_OPERATION, -1);
2834 }
2835
2836 return programObject->getAttributeLocation(name);
2837 }
2838
2839 return -1;
2840}
2841
Nicolas Capensa9b49372015-01-30 00:33:26 -05002842void APIENTRY glGetBooleanv(GLenum pname, GLboolean* params)
Nicolas Capens264f1522015-01-09 17:21:17 -05002843{
Maxime Grégoire20942c02015-07-16 14:12:47 -04002844 TRACE("(GLenum pname = 0x%X, GLboolean* params = %p)", pname, params);
Nicolas Capens264f1522015-01-09 17:21:17 -05002845
Nicolas Capensf4486fd2015-01-22 11:10:37 -05002846 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05002847
2848 if(context)
2849 {
2850 if(!(context->getBooleanv(pname, params)))
2851 {
2852 GLenum nativeType;
2853 unsigned int numParams = 0;
2854 if(!context->getQueryParameterInfo(pname, &nativeType, &numParams))
2855 return error(GL_INVALID_ENUM);
2856
2857 if(numParams == 0)
2858 return; // it is known that the pname is valid, but there are no parameters to return
2859
2860 if(nativeType == GL_FLOAT)
2861 {
2862 GLfloat *floatParams = NULL;
2863 floatParams = new GLfloat[numParams];
2864
2865 context->getFloatv(pname, floatParams);
2866
2867 for(unsigned int i = 0; i < numParams; ++i)
2868 {
2869 if(floatParams[i] == 0.0f)
2870 params[i] = GL_FALSE;
2871 else
2872 params[i] = GL_TRUE;
2873 }
2874
Maxime Grégoire20942c02015-07-16 14:12:47 -04002875 delete[] floatParams;
Nicolas Capens264f1522015-01-09 17:21:17 -05002876 }
2877 else if(nativeType == GL_INT)
2878 {
2879 GLint *intParams = NULL;
2880 intParams = new GLint[numParams];
2881
2882 context->getIntegerv(pname, intParams);
2883
2884 for(unsigned int i = 0; i < numParams; ++i)
2885 {
2886 if(intParams[i] == 0)
2887 params[i] = GL_FALSE;
2888 else
2889 params[i] = GL_TRUE;
2890 }
2891
Maxime Grégoire20942c02015-07-16 14:12:47 -04002892 delete[] intParams;
Nicolas Capens264f1522015-01-09 17:21:17 -05002893 }
2894 }
2895 }
2896}
2897
Nicolas Capensa9b49372015-01-30 00:33:26 -05002898void APIENTRY glGetBufferParameteriv(GLenum target, GLenum pname, GLint* params)
Nicolas Capens264f1522015-01-09 17:21:17 -05002899{
Nicolas Capens4be33702015-04-28 15:13:30 -07002900 TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint* params = %p)", target, pname, params);
Nicolas Capens264f1522015-01-09 17:21:17 -05002901
Nicolas Capensf4486fd2015-01-22 11:10:37 -05002902 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05002903
2904 if(context)
2905 {
Nicolas Capensf4486fd2015-01-22 11:10:37 -05002906 gl::Buffer *buffer;
Nicolas Capens264f1522015-01-09 17:21:17 -05002907
2908 switch(target)
2909 {
2910 case GL_ARRAY_BUFFER:
2911 buffer = context->getArrayBuffer();
2912 break;
2913 case GL_ELEMENT_ARRAY_BUFFER:
2914 buffer = context->getElementArrayBuffer();
2915 break;
2916 default:
2917 return error(GL_INVALID_ENUM);
2918 }
2919
2920 if(!buffer)
2921 {
2922 // A null buffer means that "0" is bound to the requested buffer target
2923 return error(GL_INVALID_OPERATION);
2924 }
2925
2926 switch(pname)
2927 {
2928 case GL_BUFFER_USAGE:
2929 *params = buffer->usage();
2930 break;
2931 case GL_BUFFER_SIZE:
2932 *params = buffer->size();
2933 break;
2934 default:
2935 return error(GL_INVALID_ENUM);
2936 }
2937 }
2938}
2939
Nicolas Capensa9b49372015-01-30 00:33:26 -05002940GLenum APIENTRY glGetError(void)
Nicolas Capens264f1522015-01-09 17:21:17 -05002941{
2942 TRACE("()");
2943
Nicolas Capensf4486fd2015-01-22 11:10:37 -05002944 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05002945
2946 if(context)
2947 {
2948 return context->getError();
2949 }
2950
2951 return GL_NO_ERROR;
2952}
2953
Nicolas Capensa9b49372015-01-30 00:33:26 -05002954void APIENTRY glGetFenceivNV(GLuint fence, GLenum pname, GLint *params)
Nicolas Capens264f1522015-01-09 17:21:17 -05002955{
Nicolas Capens4be33702015-04-28 15:13:30 -07002956 TRACE("(GLuint fence = %d, GLenum pname = 0x%X, GLint *params = %p)", fence, pname, params);
Nicolas Capens264f1522015-01-09 17:21:17 -05002957
Nicolas Capensf4486fd2015-01-22 11:10:37 -05002958 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05002959
2960 if(context)
2961 {
Nicolas Capensf4486fd2015-01-22 11:10:37 -05002962 gl::Fence *fenceObject = context->getFence(fence);
Nicolas Capens264f1522015-01-09 17:21:17 -05002963
2964 if(fenceObject == NULL)
2965 {
2966 return error(GL_INVALID_OPERATION);
2967 }
2968
2969 fenceObject->getFenceiv(pname, params);
2970 }
2971}
2972
Nicolas Capensa9b49372015-01-30 00:33:26 -05002973void APIENTRY glGetFloatv(GLenum pname, GLfloat* params)
Nicolas Capens264f1522015-01-09 17:21:17 -05002974{
Nicolas Capens4be33702015-04-28 15:13:30 -07002975 TRACE("(GLenum pname = 0x%X, GLfloat* params = %p)", pname, params);
Nicolas Capens264f1522015-01-09 17:21:17 -05002976
Nicolas Capensf4486fd2015-01-22 11:10:37 -05002977 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05002978
2979 if(context)
2980 {
2981 if(!(context->getFloatv(pname, params)))
2982 {
2983 GLenum nativeType;
2984 unsigned int numParams = 0;
2985 if(!context->getQueryParameterInfo(pname, &nativeType, &numParams))
2986 return error(GL_INVALID_ENUM);
2987
2988 if(numParams == 0)
2989 return; // it is known that the pname is valid, but that there are no parameters to return.
2990
2991 if(nativeType == GL_BOOL)
2992 {
2993 GLboolean *boolParams = NULL;
2994 boolParams = new GLboolean[numParams];
2995
2996 context->getBooleanv(pname, boolParams);
2997
2998 for(unsigned int i = 0; i < numParams; ++i)
2999 {
3000 if(boolParams[i] == GL_FALSE)
3001 params[i] = 0.0f;
3002 else
3003 params[i] = 1.0f;
3004 }
3005
Maxime Grégoire20942c02015-07-16 14:12:47 -04003006 delete[] boolParams;
Nicolas Capens264f1522015-01-09 17:21:17 -05003007 }
3008 else if(nativeType == GL_INT)
3009 {
3010 GLint *intParams = NULL;
3011 intParams = new GLint[numParams];
3012
3013 context->getIntegerv(pname, intParams);
3014
3015 for(unsigned int i = 0; i < numParams; ++i)
3016 {
3017 params[i] = (GLfloat)intParams[i];
3018 }
3019
Maxime Grégoire20942c02015-07-16 14:12:47 -04003020 delete[] intParams;
Nicolas Capens264f1522015-01-09 17:21:17 -05003021 }
3022 }
3023 }
3024}
3025
Nicolas Capensa9b49372015-01-30 00:33:26 -05003026void APIENTRY glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint* params)
Nicolas Capens264f1522015-01-09 17:21:17 -05003027{
Nicolas Capens4be33702015-04-28 15:13:30 -07003028 TRACE("(GLenum target = 0x%X, GLenum attachment = 0x%X, GLenum pname = 0x%X, GLint* params = %p)",
Maxime Grégoire20942c02015-07-16 14:12:47 -04003029 target, attachment, pname, params);
Nicolas Capens264f1522015-01-09 17:21:17 -05003030
Nicolas Capensf4486fd2015-01-22 11:10:37 -05003031 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05003032
3033 if(context)
3034 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05003035 if(target != GL_FRAMEBUFFER && target != GL_DRAW_FRAMEBUFFER_EXT && target != GL_READ_FRAMEBUFFER_EXT)
Nicolas Capens264f1522015-01-09 17:21:17 -05003036 {
3037 return error(GL_INVALID_ENUM);
3038 }
3039
Nicolas Capensf4486fd2015-01-22 11:10:37 -05003040 gl::Framebuffer *framebuffer = NULL;
Nicolas Capensa9b49372015-01-30 00:33:26 -05003041 if(target == GL_READ_FRAMEBUFFER_EXT)
Nicolas Capens264f1522015-01-09 17:21:17 -05003042 {
Nicolas Capens7cc75e12015-01-29 14:44:24 -05003043 if(context->getReadFramebufferName() == 0)
Nicolas Capens264f1522015-01-09 17:21:17 -05003044 {
3045 return error(GL_INVALID_OPERATION);
3046 }
3047
3048 framebuffer = context->getReadFramebuffer();
3049 }
3050 else
3051 {
Nicolas Capens7cc75e12015-01-29 14:44:24 -05003052 if(context->getDrawFramebufferName() == 0)
Nicolas Capens264f1522015-01-09 17:21:17 -05003053 {
3054 return error(GL_INVALID_OPERATION);
3055 }
3056
3057 framebuffer = context->getDrawFramebuffer();
3058 }
3059
3060 GLenum attachmentType;
3061 GLuint attachmentHandle;
3062 switch(attachment)
3063 {
3064 case GL_COLOR_ATTACHMENT0:
3065 attachmentType = framebuffer->getColorbufferType();
Nicolas Capens7cc75e12015-01-29 14:44:24 -05003066 attachmentHandle = framebuffer->getColorbufferName();
Nicolas Capens264f1522015-01-09 17:21:17 -05003067 break;
3068 case GL_DEPTH_ATTACHMENT:
3069 attachmentType = framebuffer->getDepthbufferType();
Nicolas Capens7cc75e12015-01-29 14:44:24 -05003070 attachmentHandle = framebuffer->getDepthbufferName();
Nicolas Capens264f1522015-01-09 17:21:17 -05003071 break;
3072 case GL_STENCIL_ATTACHMENT:
3073 attachmentType = framebuffer->getStencilbufferType();
Nicolas Capens7cc75e12015-01-29 14:44:24 -05003074 attachmentHandle = framebuffer->getStencilbufferName();
Nicolas Capens264f1522015-01-09 17:21:17 -05003075 break;
3076 default:
3077 return error(GL_INVALID_ENUM);
3078 }
3079
3080 GLenum attachmentObjectType; // Type category
3081 if(attachmentType == GL_NONE || attachmentType == GL_RENDERBUFFER)
3082 {
3083 attachmentObjectType = attachmentType;
3084 }
Nicolas Capensf4486fd2015-01-22 11:10:37 -05003085 else if(gl::IsTextureTarget(attachmentType))
Nicolas Capens264f1522015-01-09 17:21:17 -05003086 {
3087 attachmentObjectType = GL_TEXTURE;
3088 }
3089 else UNREACHABLE();
3090
3091 switch(pname)
3092 {
3093 case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE:
3094 *params = attachmentObjectType;
3095 break;
3096 case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME:
3097 if(attachmentObjectType == GL_RENDERBUFFER || attachmentObjectType == GL_TEXTURE)
3098 {
3099 *params = attachmentHandle;
3100 }
3101 else
3102 {
3103 return error(GL_INVALID_ENUM);
3104 }
3105 break;
3106 case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL:
3107 if(attachmentObjectType == GL_TEXTURE)
3108 {
3109 *params = 0; // FramebufferTexture2D will not allow level to be set to anything else in GL ES 2.0
3110 }
3111 else
3112 {
3113 return error(GL_INVALID_ENUM);
3114 }
3115 break;
3116 case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE:
3117 if(attachmentObjectType == GL_TEXTURE)
3118 {
Nicolas Capensf4486fd2015-01-22 11:10:37 -05003119 if(gl::IsCubemapTextureTarget(attachmentType))
Nicolas Capens264f1522015-01-09 17:21:17 -05003120 {
3121 *params = attachmentType;
3122 }
3123 else
3124 {
3125 *params = 0;
3126 }
3127 }
3128 else
3129 {
3130 return error(GL_INVALID_ENUM);
3131 }
3132 break;
3133 default:
3134 return error(GL_INVALID_ENUM);
3135 }
3136 }
3137}
3138
Nicolas Capensa9b49372015-01-30 00:33:26 -05003139GLenum APIENTRY glGetGraphicsResetStatusEXT(void)
Nicolas Capens264f1522015-01-09 17:21:17 -05003140{
3141 TRACE("()");
3142
3143 return GL_NO_ERROR;
3144}
3145
Nicolas Capensa9b49372015-01-30 00:33:26 -05003146void APIENTRY glGetIntegerv(GLenum pname, GLint* params)
Nicolas Capens264f1522015-01-09 17:21:17 -05003147{
Nicolas Capens4be33702015-04-28 15:13:30 -07003148 TRACE("(GLenum pname = 0x%X, GLint* params = %p)", pname, params);
Nicolas Capens264f1522015-01-09 17:21:17 -05003149
Nicolas Capensf4486fd2015-01-22 11:10:37 -05003150 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05003151
3152 if(context)
3153 {
3154 if(!(context->getIntegerv(pname, params)))
3155 {
3156 GLenum nativeType;
3157 unsigned int numParams = 0;
3158 if(!context->getQueryParameterInfo(pname, &nativeType, &numParams))
Maxime Grégoire20942c02015-07-16 14:12:47 -04003159 {
Nicolas Capens264f1522015-01-09 17:21:17 -05003160 return error(GL_INVALID_ENUM);
Maxime Grégoire20942c02015-07-16 14:12:47 -04003161 }
Nicolas Capens264f1522015-01-09 17:21:17 -05003162
3163 if(numParams == 0)
3164 return; // it is known that pname is valid, but there are no parameters to return
3165
3166 if(nativeType == GL_BOOL)
3167 {
3168 GLboolean *boolParams = NULL;
3169 boolParams = new GLboolean[numParams];
3170
3171 context->getBooleanv(pname, boolParams);
3172
3173 for(unsigned int i = 0; i < numParams; ++i)
3174 {
3175 if(boolParams[i] == GL_FALSE)
3176 params[i] = 0;
3177 else
3178 params[i] = 1;
3179 }
3180
Maxime Grégoire20942c02015-07-16 14:12:47 -04003181 delete[] boolParams;
Nicolas Capens264f1522015-01-09 17:21:17 -05003182 }
3183 else if(nativeType == GL_FLOAT)
3184 {
3185 GLfloat *floatParams = NULL;
3186 floatParams = new GLfloat[numParams];
3187
3188 context->getFloatv(pname, floatParams);
3189
3190 for(unsigned int i = 0; i < numParams; ++i)
3191 {
3192 if(pname == GL_DEPTH_RANGE || pname == GL_COLOR_CLEAR_VALUE || pname == GL_DEPTH_CLEAR_VALUE || pname == GL_BLEND_COLOR)
3193 {
3194 params[i] = (GLint)(((GLfloat)(0xFFFFFFFF) * floatParams[i] - 1.0f) / 2.0f);
3195 }
3196 else
3197 {
3198 params[i] = (GLint)(floatParams[i] > 0.0f ? floor(floatParams[i] + 0.5) : ceil(floatParams[i] - 0.5));
3199 }
3200 }
3201
Maxime Grégoire20942c02015-07-16 14:12:47 -04003202 delete[] floatParams;
Nicolas Capens264f1522015-01-09 17:21:17 -05003203 }
3204 }
3205 }
3206}
3207
Nicolas Capensa9b49372015-01-30 00:33:26 -05003208void APIENTRY glGetProgramiv(GLuint program, GLenum pname, GLint* params)
Nicolas Capens264f1522015-01-09 17:21:17 -05003209{
Nicolas Capens4be33702015-04-28 15:13:30 -07003210 TRACE("(GLuint program = %d, GLenum pname = 0x%X, GLint* params = %p)", program, pname, params);
Nicolas Capens264f1522015-01-09 17:21:17 -05003211
Nicolas Capensf4486fd2015-01-22 11:10:37 -05003212 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05003213
3214 if(context)
3215 {
Nicolas Capensf4486fd2015-01-22 11:10:37 -05003216 gl::Program *programObject = context->getProgram(program);
Nicolas Capens264f1522015-01-09 17:21:17 -05003217
3218 if(!programObject)
3219 {
3220 return error(GL_INVALID_VALUE);
3221 }
3222
3223 switch(pname)
3224 {
3225 case GL_DELETE_STATUS:
3226 *params = programObject->isFlaggedForDeletion();
3227 return;
3228 case GL_LINK_STATUS:
3229 *params = programObject->isLinked();
3230 return;
3231 case GL_VALIDATE_STATUS:
3232 *params = programObject->isValidated();
3233 return;
3234 case GL_INFO_LOG_LENGTH:
3235 *params = programObject->getInfoLogLength();
3236 return;
3237 case GL_ATTACHED_SHADERS:
3238 *params = programObject->getAttachedShadersCount();
3239 return;
3240 case GL_ACTIVE_ATTRIBUTES:
3241 *params = programObject->getActiveAttributeCount();
3242 return;
3243 case GL_ACTIVE_ATTRIBUTE_MAX_LENGTH:
3244 *params = programObject->getActiveAttributeMaxLength();
3245 return;
3246 case GL_ACTIVE_UNIFORMS:
3247 *params = programObject->getActiveUniformCount();
3248 return;
3249 case GL_ACTIVE_UNIFORM_MAX_LENGTH:
3250 *params = programObject->getActiveUniformMaxLength();
3251 return;
3252 default:
3253 return error(GL_INVALID_ENUM);
3254 }
3255 }
3256}
3257
Nicolas Capensa9b49372015-01-30 00:33:26 -05003258void APIENTRY glGetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog)
Nicolas Capens264f1522015-01-09 17:21:17 -05003259{
Nicolas Capens4be33702015-04-28 15:13:30 -07003260 TRACE("(GLuint program = %d, GLsizei bufsize = %d, GLsizei* length = %p, GLchar* infolog = %p)",
Maxime Grégoire20942c02015-07-16 14:12:47 -04003261 program, bufsize, length, infolog);
Nicolas Capens264f1522015-01-09 17:21:17 -05003262
3263 if(bufsize < 0)
3264 {
3265 return error(GL_INVALID_VALUE);
3266 }
3267
Nicolas Capensf4486fd2015-01-22 11:10:37 -05003268 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05003269
3270 if(context)
3271 {
Nicolas Capensf4486fd2015-01-22 11:10:37 -05003272 gl::Program *programObject = context->getProgram(program);
Nicolas Capens264f1522015-01-09 17:21:17 -05003273
3274 if(!programObject)
3275 {
3276 return error(GL_INVALID_VALUE);
3277 }
3278
3279 programObject->getInfoLog(bufsize, length, infolog);
3280 }
3281}
3282
Nicolas Capensa9b49372015-01-30 00:33:26 -05003283void APIENTRY glGetQueryivEXT(GLenum target, GLenum pname, GLint *params)
Nicolas Capens264f1522015-01-09 17:21:17 -05003284{
Nicolas Capens4be33702015-04-28 15:13:30 -07003285 TRACE("GLenum target = 0x%X, GLenum pname = 0x%X, GLint *params = %p)", target, pname, params);
Nicolas Capens264f1522015-01-09 17:21:17 -05003286
3287 switch(pname)
3288 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05003289 case GL_CURRENT_QUERY:
Nicolas Capens264f1522015-01-09 17:21:17 -05003290 break;
3291 default:
3292 return error(GL_INVALID_ENUM);
3293 }
3294
Nicolas Capensf4486fd2015-01-22 11:10:37 -05003295 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05003296
3297 if(context)
3298 {
3299 params[0] = context->getActiveQuery(target);
3300 }
3301}
3302
Nicolas Capensa9b49372015-01-30 00:33:26 -05003303void APIENTRY glGetQueryObjectuivEXT(GLuint name, GLenum pname, GLuint *params)
Nicolas Capens264f1522015-01-09 17:21:17 -05003304{
Nicolas Capens4be33702015-04-28 15:13:30 -07003305 TRACE("(GLuint name = %d, GLenum pname = 0x%X, GLuint *params = %p)", name, pname, params);
Nicolas Capens264f1522015-01-09 17:21:17 -05003306
3307 switch(pname)
3308 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05003309 case GL_QUERY_RESULT:
3310 case GL_QUERY_RESULT_AVAILABLE:
Nicolas Capens264f1522015-01-09 17:21:17 -05003311 break;
3312 default:
3313 return error(GL_INVALID_ENUM);
3314 }
3315
Nicolas Capensf4486fd2015-01-22 11:10:37 -05003316 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05003317
3318 if(context)
3319 {
Nicolas Capens7cc75e12015-01-29 14:44:24 -05003320 gl::Query *queryObject = context->getQuery(name, false, GL_NONE);
Nicolas Capens264f1522015-01-09 17:21:17 -05003321
3322 if(!queryObject)
3323 {
3324 return error(GL_INVALID_OPERATION);
3325 }
3326
Nicolas Capens7cc75e12015-01-29 14:44:24 -05003327 if(context->getActiveQuery(queryObject->getType()) == name)
Nicolas Capens264f1522015-01-09 17:21:17 -05003328 {
3329 return error(GL_INVALID_OPERATION);
3330 }
3331
3332 switch(pname)
3333 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05003334 case GL_QUERY_RESULT:
Nicolas Capens264f1522015-01-09 17:21:17 -05003335 params[0] = queryObject->getResult();
3336 break;
Nicolas Capensa9b49372015-01-30 00:33:26 -05003337 case GL_QUERY_RESULT_AVAILABLE:
Nicolas Capens264f1522015-01-09 17:21:17 -05003338 params[0] = queryObject->isResultAvailable();
3339 break;
3340 default:
3341 ASSERT(false);
3342 }
3343 }
3344}
3345
Nicolas Capensa9b49372015-01-30 00:33:26 -05003346void APIENTRY glGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint* params)
Nicolas Capens264f1522015-01-09 17:21:17 -05003347{
Nicolas Capens4be33702015-04-28 15:13:30 -07003348 TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint* params = %p)", target, pname, params);
Nicolas Capens264f1522015-01-09 17:21:17 -05003349
Nicolas Capensf4486fd2015-01-22 11:10:37 -05003350 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05003351
3352 if(context)
3353 {
3354 if(target != GL_RENDERBUFFER)
3355 {
3356 return error(GL_INVALID_ENUM);
3357 }
3358
Nicolas Capens7cc75e12015-01-29 14:44:24 -05003359 if(context->getRenderbufferName() == 0)
Nicolas Capens264f1522015-01-09 17:21:17 -05003360 {
3361 return error(GL_INVALID_OPERATION);
3362 }
3363
Nicolas Capens7cc75e12015-01-29 14:44:24 -05003364 gl::Renderbuffer *renderbuffer = context->getRenderbuffer(context->getRenderbufferName());
Nicolas Capens264f1522015-01-09 17:21:17 -05003365
3366 switch(pname)
3367 {
3368 case GL_RENDERBUFFER_WIDTH: *params = renderbuffer->getWidth(); break;
3369 case GL_RENDERBUFFER_HEIGHT: *params = renderbuffer->getHeight(); break;
3370 case GL_RENDERBUFFER_INTERNAL_FORMAT: *params = renderbuffer->getFormat(); break;
3371 case GL_RENDERBUFFER_RED_SIZE: *params = renderbuffer->getRedSize(); break;
3372 case GL_RENDERBUFFER_GREEN_SIZE: *params = renderbuffer->getGreenSize(); break;
3373 case GL_RENDERBUFFER_BLUE_SIZE: *params = renderbuffer->getBlueSize(); break;
3374 case GL_RENDERBUFFER_ALPHA_SIZE: *params = renderbuffer->getAlphaSize(); break;
3375 case GL_RENDERBUFFER_DEPTH_SIZE: *params = renderbuffer->getDepthSize(); break;
3376 case GL_RENDERBUFFER_STENCIL_SIZE: *params = renderbuffer->getStencilSize(); break;
Nicolas Capensa9b49372015-01-30 00:33:26 -05003377 case GL_RENDERBUFFER_SAMPLES_EXT: *params = renderbuffer->getSamples(); break;
Nicolas Capens264f1522015-01-09 17:21:17 -05003378 default:
3379 return error(GL_INVALID_ENUM);
3380 }
3381 }
3382}
3383
Nicolas Capensa9b49372015-01-30 00:33:26 -05003384void APIENTRY glGetShaderiv(GLuint shader, GLenum pname, GLint* params)
Nicolas Capens264f1522015-01-09 17:21:17 -05003385{
Nicolas Capens4be33702015-04-28 15:13:30 -07003386 TRACE("(GLuint shader = %d, GLenum pname = %d, GLint* params = %p)", shader, pname, params);
Nicolas Capens264f1522015-01-09 17:21:17 -05003387
Nicolas Capensf4486fd2015-01-22 11:10:37 -05003388 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05003389
3390 if(context)
3391 {
Nicolas Capensf4486fd2015-01-22 11:10:37 -05003392 gl::Shader *shaderObject = context->getShader(shader);
Nicolas Capens264f1522015-01-09 17:21:17 -05003393
3394 if(!shaderObject)
3395 {
3396 return error(GL_INVALID_VALUE);
3397 }
3398
3399 switch(pname)
3400 {
3401 case GL_SHADER_TYPE:
3402 *params = shaderObject->getType();
3403 return;
3404 case GL_DELETE_STATUS:
3405 *params = shaderObject->isFlaggedForDeletion();
3406 return;
3407 case GL_COMPILE_STATUS:
3408 *params = shaderObject->isCompiled() ? GL_TRUE : GL_FALSE;
3409 return;
3410 case GL_INFO_LOG_LENGTH:
3411 *params = shaderObject->getInfoLogLength();
3412 return;
3413 case GL_SHADER_SOURCE_LENGTH:
3414 *params = shaderObject->getSourceLength();
3415 return;
3416 default:
3417 return error(GL_INVALID_ENUM);
3418 }
3419 }
3420}
3421
Nicolas Capensa9b49372015-01-30 00:33:26 -05003422void APIENTRY glGetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* infolog)
Nicolas Capens264f1522015-01-09 17:21:17 -05003423{
Nicolas Capens4be33702015-04-28 15:13:30 -07003424 TRACE("(GLuint shader = %d, GLsizei bufsize = %d, GLsizei* length = %p, GLchar* infolog = %p)",
Maxime Grégoire20942c02015-07-16 14:12:47 -04003425 shader, bufsize, length, infolog);
Nicolas Capens264f1522015-01-09 17:21:17 -05003426
3427 if(bufsize < 0)
3428 {
3429 return error(GL_INVALID_VALUE);
3430 }
3431
Nicolas Capensf4486fd2015-01-22 11:10:37 -05003432 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05003433
3434 if(context)
3435 {
Nicolas Capensf4486fd2015-01-22 11:10:37 -05003436 gl::Shader *shaderObject = context->getShader(shader);
Nicolas Capens264f1522015-01-09 17:21:17 -05003437
3438 if(!shaderObject)
3439 {
3440 return error(GL_INVALID_VALUE);
3441 }
3442
3443 shaderObject->getInfoLog(bufsize, length, infolog);
3444 }
3445}
3446
Nicolas Capensa9b49372015-01-30 00:33:26 -05003447void APIENTRY glGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision)
Nicolas Capens264f1522015-01-09 17:21:17 -05003448{
Nicolas Capens4be33702015-04-28 15:13:30 -07003449 TRACE("(GLenum shadertype = 0x%X, GLenum precisiontype = 0x%X, GLint* range = %p, GLint* precision = %p)",
Maxime Grégoire20942c02015-07-16 14:12:47 -04003450 shadertype, precisiontype, range, precision);
Nicolas Capens264f1522015-01-09 17:21:17 -05003451
3452 switch(shadertype)
3453 {
3454 case GL_VERTEX_SHADER:
3455 case GL_FRAGMENT_SHADER:
3456 break;
3457 default:
3458 return error(GL_INVALID_ENUM);
3459 }
3460
3461 switch(precisiontype)
3462 {
3463 case GL_LOW_FLOAT:
3464 case GL_MEDIUM_FLOAT:
3465 case GL_HIGH_FLOAT:
3466 // IEEE 754 single-precision
3467 range[0] = 127;
3468 range[1] = 127;
3469 *precision = 23;
3470 break;
3471 case GL_LOW_INT:
3472 case GL_MEDIUM_INT:
3473 case GL_HIGH_INT:
3474 // Single-precision floating-point numbers can accurately represent integers up to +/-16777216
3475 range[0] = 24;
3476 range[1] = 24;
3477 *precision = 0;
3478 break;
3479 default:
3480 return error(GL_INVALID_ENUM);
3481 }
3482}
3483
Nicolas Capensa9b49372015-01-30 00:33:26 -05003484void APIENTRY glGetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source)
Nicolas Capens264f1522015-01-09 17:21:17 -05003485{
Nicolas Capens4be33702015-04-28 15:13:30 -07003486 TRACE("(GLuint shader = %d, GLsizei bufsize = %d, GLsizei* length = %p, GLchar* source = %p)",
Maxime Grégoire20942c02015-07-16 14:12:47 -04003487 shader, bufsize, length, source);
Nicolas Capens264f1522015-01-09 17:21:17 -05003488
3489 if(bufsize < 0)
3490 {
3491 return error(GL_INVALID_VALUE);
3492 }
3493
Nicolas Capensf4486fd2015-01-22 11:10:37 -05003494 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05003495
3496 if(context)
3497 {
Nicolas Capensf4486fd2015-01-22 11:10:37 -05003498 gl::Shader *shaderObject = context->getShader(shader);
Nicolas Capens264f1522015-01-09 17:21:17 -05003499
3500 if(!shaderObject)
3501 {
3502 return error(GL_INVALID_OPERATION);
3503 }
3504
3505 shaderObject->getSource(bufsize, length, source);
3506 }
3507}
3508
Nicolas Capensa9b49372015-01-30 00:33:26 -05003509const GLubyte* APIENTRY glGetString(GLenum name)
Nicolas Capens264f1522015-01-09 17:21:17 -05003510{
3511 TRACE("(GLenum name = 0x%X)", name);
3512
Nicolas Capens264f1522015-01-09 17:21:17 -05003513 switch(name)
3514 {
3515 case GL_VENDOR:
Maxime Grégoire20942c02015-07-16 14:12:47 -04003516 return (GLubyte*)"NVIDIA Corporation";// "TransGaming Inc.";
Nicolas Capens264f1522015-01-09 17:21:17 -05003517 case GL_RENDERER:
Maxime Grégoire20942c02015-07-16 14:12:47 -04003518 return (GLubyte*)"Quadro K600/PCIe/SSE2";// "SwiftShader";
Nicolas Capens264f1522015-01-09 17:21:17 -05003519 case GL_VERSION:
Maxime Grégoire20942c02015-07-16 14:12:47 -04003520 return (GLubyte*)"2.1.2 NVIDIA 347.62";//"2.1.2 SwiftShader "VERSION_STRING;
Nicolas Capens264f1522015-01-09 17:21:17 -05003521 case GL_SHADING_LANGUAGE_VERSION:
Maxime Grégoire20942c02015-07-16 14:12:47 -04003522 return (GLubyte*)/*"3.0.0 NVIDIA "VERSION_STRING;*/"4.50 NVIDIA";
Nicolas Capens264f1522015-01-09 17:21:17 -05003523 case GL_EXTENSIONS:
3524 // Keep list sorted in following order:
3525 // OES extensions
3526 // EXT extensions
3527 // Vendor extensions
3528 return (GLubyte*)
Maxime Grégoire20942c02015-07-16 14:12:47 -04003529 ////1.1
3530 //"GL_EXT_blend_logic_op "
3531 //"GL_EXT_copy_texture "
3532 //"GL_EXT_polygon_offset "
3533 //"GL_EXT_subtexture "
3534 //"GL_EXT_texture "
3535 //"GL_EXT_texture_object "
3536 ////"GL_EXT_vertex_array "
3537 ////1.2
3538 //"GL_EXT_bgra "
3539 //"GL_EXT_draw_range_elements "
3540 //"GL_EXT_packed_pixels "
3541 //"GL_EXT_rescale_normal "
3542 //"GL_EXT_separate_specular_color "
3543 //"GL_EXT_texture3D "
3544 //"GL_EXT_texture_edge_clamp "
3545 //"GL_SGIS_texture_edge_clamp "
3546 //"GL_SGIS_texture_lod "
3547 ////1.3
3548 //"GL_ARB_multisample "
3549 //"GL_ARB_multitexture "
3550 //"GL_ARB_texture_border_clamp "
3551 //"GL_ARB_texture_compression "
3552 //"GL_ARB_texture_cube_map "
3553 //"GL_ARB_texture_env_add "
3554 //"GL_ARB_texture_env_combine "
3555 //"GL_ARB_texture_env_dot3 "
3556 //"GL_ARB_transpose_matrix "
3557 ////1.4
3558 //"GL_ARB_depth_texture "
3559 //"GL_ARB_point_parameters "
3560 //"GL_ARB_shadow "
3561 //"GL_ARB_texture_env_crossbar "
3562 //"GL_ARB_texture_mirrored_repeat "
3563 //"GL_ARB_windows_pos "
3564 //"GL_EXT_blend_color "
3565 //"GL_EXT_blend_func_separate "
3566 //"GL_EXT_fog_coord "
3567 //"GL_EXT_multi_draw_arrays "
3568 //"GL_EXT_secondary_color "
3569 //"GL_EXT_stencil_wrap "
3570 //"GL_EXT_texture_lod_bias "
3571 //"GL_NV_blend_square "
3572 //"GL_SGIS_generate_mipmap "
3573 ////1.5
3574 //"GL_ARB_occlusion_query "
3575 //"GL_ARB_vertex_buffer_object "
3576 //"GL_EXT_shadow_funcs "
3577 ////2.0
3578 //"GL_ARB_draw_buffers "
3579 //"GL_ARB_fragment_shader "
3580 //"GL_ARB_point_sprite "
3581 //"GL_ARB_shader objects "
3582 //"GL_ARB_shading_language_100 "
3583 //"GL_ARB_texture_non_power_of_two "
3584 //"GL_ARB_vertex_shader "
3585 //"GL_EXT_blend_equation_separate "
3586 //"GL_EXT_stencil_two_side "
3587
3588 ////2.1
Maxime Grégoiredf041002015-07-15 15:19:38 -04003589 //"GL_ARB_pixel_buffer_object "
Maxime Grégoire20942c02015-07-16 14:12:47 -04003590 //"GL_EXT_texture_sRGB "
3591
3592 //"GL_EXT_framebuffer_object "
3593 //"GL_ARB_framebuffer_object "
3594 //"GL_ARB_shader_atomic_counters "
3595 //"GL_ARB_shader_bit_encoding "
3596 //"GL_ARB_shader_draw_parameters "
3597 //"GL_ARB_shader_group_vote "
3598 //"GL_ARB_shader_image_load_store "
3599 //"GL_ARB_shader_image_size "
3600 //"GL_ARB_shader_objects "
3601 //"GL_ARB_shader_precision "
3602 //"GL_ARB_query_buffer_object "
3603 //"GL_ARB_shader_storage_buffer_object "
3604 //"GL_ARB_shader_subroutine "
3605 //"GL_ARB_shader_texture_lod "
3606 //"GL_ARB_shadow "
3607 //"GL_ARB_shading_language_420pack "
3608 //"GL_ARB_shading_language_include "
3609 //"GL_ARB_shading_language_packing ";
3610
3611
3612 //NVIDIA CARD EXTENSIONS
3613 "GL_AMD_multi_draw_indirect "
3614 "GL_AMD_seamless_cubemap_per_texture "
3615 "GL_ARB_arrays_of_arrays "
3616 "GL_ARB_base_instance "
3617 "GL_ARB_bindless_texture "
3618 "GL_ARB_blend_func_extended "
3619 "GL_ARB_buffer_storage "
3620 "GL_ARB_clear_buffer_object "
3621 "GL_ARB_clear_texture "
3622 "GL_ARB_clip_control "
3623 "GL_ARB_color_buffer_float "
3624 "GL_ARB_compressed_texture_pixel_storage "
3625 "GL_ARB_compute_shader "
3626 "GL_ARB_compute_variable_group_size "
3627 "GL_ARB_conditional_render_inverted "
3628 "GL_ARB_conservative_depth "
3629 "GL_ARB_copy_buffer "
3630 "GL_ARB_copy_image "
3631 "GL_ARB_cull_distance "
3632 "GL_ARB_debug_output "
3633 "GL_ARB_depth_buffer_float "
3634 "GL_ARB_depth_clamp "
3635 "GL_ARB_depth_texture "
3636 "GL_ARB_derivative_control "
3637 "GL_ARB_direct_state_access "
3638 "GL_ARB_draw_buffers "
3639 "GL_ARB_draw_buffers_blend "
3640 "GL_ARB_draw_elements_base_vertex "
3641 "GL_ARB_draw_indirect "
3642 "GL_ARB_draw_instanced "
3643 "GL_ARB_enhanced_layouts "
3644 "GL_ARB_ES2_compatibility "
3645 "GL_ARB_ES3_1_compatibility "
3646 "GL_ARB_ES3_compatibility "
3647 "GL_ARB_explicit_attrib_location "
3648 "GL_ARB_explicit_uniform_location "
3649 "GL_ARB_fragment_coord_conventions "
3650 "GL_ARB_fragment_layer_viewport "
3651 "GL_ARB_fragment_program "
3652 "GL_ARB_fragment_program_shadow "
3653 "GL_ARB_fragment_shader "
3654 "GL_ARB_framebuffer_no_attachments "
3655 "GL_ARB_framebuffer_object "
3656 "GL_ARB_framebuffer_sRGB "
3657 "GL_ARB_geometry_shader4 "
3658 "GL_ARB_get_program_binary "
3659 "GL_ARB_get_texture_sub_image "
3660 "GL_ARB_gpu_shader5 "
3661 "GL_ARB_gpu_shader_fp64 "
3662 "GL_ARB_half_float_pixel "
3663 "GL_ARB_half_float_vertex "
3664 "GL_ARB_imaging "
3665 "GL_ARB_indirect_parameters "
3666 "GL_ARB_instanced_arrays "
3667 "GL_ARB_internalformat_query "
3668 "GL_ARB_internalformat_query2 "
3669 "GL_ARB_invalidate_subdata "
3670 "GL_ARB_map_buffer_alignment "
3671 "GL_ARB_map_buffer_range "
3672 "GL_ARB_multi_bind "
3673 "GL_ARB_multi_draw_indirect "
3674 "GL_ARB_multisample "
3675 "GL_ARB_multitexture "
3676 "GL_ARB_occlusion_query "
3677 "GL_ARB_occlusion_query2 "
3678 "GL_ARB_pipeline_statistics_query "
3679 "GL_ARB_pixel_buffer_object "
3680 "GL_ARB_point_parameters "
3681 "GL_ARB_point_sprite "
3682 "GL_ARB_program_interface_query "
3683 "GL_ARB_provoking_vertex "
3684 "GL_ARB_query_buffer_object "
3685 "GL_ARB_robust_buffer_access_behavior "
3686 "GL_ARB_robustness "
3687 "GL_ARB_sample_shading "
3688 "GL_ARB_sampler_objects "
3689 "GL_ARB_seamless_cube_map "
3690 "GL_ARB_seamless_cubemap_per_texture "
3691 "GL_ARB_separate_shader_objects "
3692 "GL_ARB_shader_atomic_counters "
3693 "GL_ARB_shader_bit_encoding "
3694 "GL_ARB_shader_draw_parameters "
3695 "GL_ARB_shader_group_vote "
3696 "GL_ARB_shader_image_load_store "
3697 "GL_ARB_shader_image_size "
3698 "GL_ARB_shader_objects "
3699 "GL_ARB_shader_precision "
3700 "GL_ARB_shader_storage_buffer_object "
3701 "GL_ARB_shader_subroutine "
3702 "GL_ARB_shader_texture_image_samples "
3703 "GL_ARB_shader_texture_lod "
3704 "GL_ARB_shading_language_100 "
3705 "GL_ARB_shading_language_420pack "
3706 "GL_ARB_shading_language_include "
3707 "GL_ARB_shading_language_packing "
3708 "GL_ARB_shadow "
3709 "GL_ARB_sparse_buffer "
3710 "GL_ARB_sparse_texture "
3711 "GL_ARB_stencil_texturing "
3712 "GL_ARB_sync "
3713 "GL_ARB_tessellation_shader "
3714 "GL_ARB_texture_barrier "
3715 "GL_ARB_texture_border_clamp "
3716 "GL_ARB_texture_buffer_object "
3717 "GL_ARB_texture_buffer_object_rgb32 "
3718 "GL_ARB_texture_buffer_range "
3719 "GL_ARB_texture_compression "
3720 "GL_ARB_texture_compression_bptc "
3721 "GL_ARB_texture_compression_rgtc "
3722 "GL_ARB_texture_cube_map "
3723 "GL_ARB_texture_cube_map_array "
3724 "GL_ARB_texture_env_add "
3725 "GL_ARB_texture_env_combine "
3726 "GL_ARB_texture_env_crossbar "
3727 "GL_ARB_texture_env_dot3 "
3728 "GL_ARB_texture_float "
3729 "GL_ARB_texture_gather "
3730 "GL_ARB_texture_mirror_clamp_to_edge "
3731 "GL_ARB_texture_mirrored_repeat "
3732 "GL_ARB_texture_multisample "
3733 "GL_ARB_texture_non_power_of_two "
3734 "GL_ARB_texture_query_levels "
3735 "GL_ARB_texture_query_lod "
3736 "GL_ARB_texture_rectangle "
3737 "GL_ARB_texture_rg "
3738 "GL_ARB_texture_rgb10_a2ui "
3739 "GL_ARB_texture_stencil8 "
3740 "GL_ARB_texture_storage "
3741 "GL_ARB_texture_storage_multisample "
3742 "GL_ARB_texture_swizzle "
3743 "GL_ARB_texture_view "
3744 "GL_ARB_timer_query "
3745 "GL_ARB_transform_feedback2 "
3746 "GL_ARB_transform_feedback3 "
3747 "GL_ARB_transform_feedback_instanced "
3748 "GL_ARB_transform_feedback_overflow_query "
3749 "GL_ARB_transpose_matrix "
3750 "GL_ARB_uniform_buffer_object "
3751 "GL_ARB_vertex_array_bgra "
3752 "GL_ARB_vertex_array_object "
3753 "GL_ARB_vertex_attrib_64bit "
3754 "GL_ARB_vertex_attrib_binding "
3755 "GL_ARB_vertex_buffer_object "
3756 "GL_ARB_vertex_program "
3757 "GL_ARB_vertex_shader "
3758 "GL_ARB_vertex_type_10f_11f_11f_rev "
3759 "GL_ARB_vertex_type_2_10_10_10_rev "
3760 "GL_ARB_viewport_array "
3761 "GL_ARB_window_pos "
3762 "GL_ATI_draw_buffers "
3763 "GL_ATI_texture_float "
3764 "GL_ATI_texture_mirror_once "
3765 "GL_EXT_abgr "
3766 "GL_EXT_bgra "
3767 "GL_EXT_bindable_uniform "
3768 "GL_EXT_blend_color "
3769 "GL_EXT_blend_equation_separate "
Nicolas Capensa9b49372015-01-30 00:33:26 -05003770 "GL_EXT_blend_func_separate "
Maxime Grégoire20942c02015-07-16 14:12:47 -04003771 "GL_EXT_blend_minmax "
3772 "GL_EXT_blend_subtract "
3773 "GL_EXT_Cg_shader "
3774 "GL_EXT_compiled_vertex_array "
3775 "GL_EXT_depth_bounds_test "
3776 "GL_EXT_direct_state_access "
3777 "GL_EXT_draw_buffers2 "
3778 "GL_EXT_draw_instanced "
3779 "GL_EXT_draw_range_elements "
3780 "GL_EXT_fog_coord "
Nicolas Capensa9b49372015-01-30 00:33:26 -05003781 "GL_EXT_framebuffer_blit "
3782 "GL_EXT_framebuffer_multisample "
Maxime Grégoire20942c02015-07-16 14:12:47 -04003783 "GL_EXT_framebuffer_multisample_blit_scaled "
3784 "GL_EXT_framebuffer_object "
3785 "GL_EXT_framebuffer_sRGB "
3786 "GL_EXT_geometry_shader4 "
3787 "GL_EXT_gpu_program_parameters "
3788 "GL_EXT_gpu_shader4 "
3789 "GL_EXT_import_sync_object "
3790 "GL_EXT_multi_draw_arrays "
3791 "GL_EXT_packed_depth_stencil "
3792 "GL_EXT_packed_float "
3793 //"GL_EXT_packed_pixels "
3794 "GL_EXT_pixel_buffer_object "
3795 "GL_EXT_point_parameters "
3796 "GL_EXT_polygon_offset_clamp "
3797 "GL_EXT_provoking_vertex "
3798 "GL_EXT_rescale_normal "
3799 "GL_EXT_secondary_color "
3800 "GL_EXT_separate_shader_objects "
3801 "GL_EXT_separate_specular_color "
3802 "GL_EXT_shader_image_load_store "
3803 "GL_EXT_shader_integer_mix "
3804 "GL_EXT_shadow_funcs "
3805 "GL_EXT_stencil_two_side "
3806 "GL_EXT_stencil_wrap "
3807 "GL_EXT_texture3D "
3808 "GL_EXT_texture_array "
3809 "GL_EXT_texture_buffer_object "
3810 "GL_EXT_texture_compression_dxt1 "
3811 "GL_EXT_texture_compression_latc "
3812 "GL_EXT_texture_compression_rgtc "
3813 "GL_EXT_texture_compression_s3tc "
3814 "GL_EXT_texture_cube_map "
3815 "GL_EXT_texture_edge_clamp "
3816 "GL_EXT_texture_env_add "
3817 "GL_EXT_texture_env_combine "
3818 "GL_EXT_texture_env_dot3 "
3819 "GL_EXT_texture_filter_anisotropic "
3820 "GL_EXT_texture_integer "
3821 "GL_EXT_texture_lod "
3822 "GL_EXT_texture_lod_bias "
3823 "GL_EXT_texture_mirror_clamp "
3824 "GL_EXT_texture_object "
3825 "GL_EXT_texture_shared_exponent "
3826 "GL_EXT_texture_sRGB "
3827 "GL_EXT_texture_sRGB_decode "
3828 "GL_EXT_texture_storage "
3829 "GL_EXT_texture_swizzle "
3830 "GL_EXT_timer_query "
3831 "GL_EXT_transform_feedback2 "
3832 "GL_EXT_vertex_array "
3833 "GL_EXT_vertex_array_bgra "
3834 "GL_EXT_vertex_attrib_64bit "
3835 "GL_EXTX_framebuffer_mixed_formats "
3836 "GL_IBM_rasterpos_clip "
3837 "GL_IBM_texture_mirrored_repeat "
3838 "GL_KHR_blend_equation_advanced "
3839 "GL_KHR_context_flush_control "
3840 "GL_KHR_debug "
3841 "GL_KHR_robust_buffer_access_behavior "
3842 "GL_KHR_robustness "
3843 "GL_KTX_buffer_region "
3844 "GL_NV_bindless_multi_draw_indirect "
3845 "GL_NV_bindless_multi_draw_indirect_count "
3846 "GL_NV_bindless_texture "
3847 "GL_NV_blend_equation_advanced "
3848 "GL_NV_blend_square "
3849 "GL_NV_command_list "
3850 "GL_NV_compute_program5 "
3851 "GL_NV_conditional_render "
3852 "GL_NV_copy_depth_to_color "
3853 "GL_NV_copy_image "
3854 "GL_NV_deep_texture3D "
3855 "GL_NV_depth_buffer_float "
3856 "GL_NV_depth_clamp "
3857 "GL_NV_draw_texture "
3858 "GL_NV_ES1_1_compatibility "
3859 "GL_NV_ES3_1_compatibility "
3860 "GL_NV_explicit_multisample "
3861 "GL_NV_fence "
3862 "GL_NV_float_buffer "
3863 "GL_NV_fog_distance "
3864 "GL_NV_fragment_program "
3865 "GL_NV_fragment_program2 "
3866 "GL_NV_fragment_program_option "
3867 "GL_NV_framebuffer_multisample_coverage "
3868 "GL_NV_geometry_shader4 "
3869 "GL_NV_gpu_program4 "
3870 "GL_NV_gpu_program4_1 "
3871 "GL_NV_gpu_program5 "
3872 "GL_NV_gpu_program5_mem_extended "
3873 "GL_NV_gpu_program_fp64 "
3874 "GL_NV_gpu_shader5 "
3875 "GL_NV_half_float "
3876 "GL_NV_internalformat_sample_query "
3877 "GL_NV_light_max_exponent "
3878 "GL_NV_multisample_coverage "
3879 "GL_NV_multisample_filter_hint "
3880 "GL_NV_occlusion_query "
3881 "GL_NV_packed_depth_stencil "
3882 "GL_NV_parameter_buffer_object "
3883 "GL_NV_parameter_buffer_object2 "
3884 "GL_NV_path_rendering "
3885 "GL_NV_pixel_data_range "
3886 "GL_NV_point_sprite "
3887 "GL_NV_primitive_restart "
3888 "GL_NV_register_combiners "
3889 "GL_NV_register_combiners2 "
3890 "GL_NV_shader_atomic_counters "
3891 "GL_NV_shader_atomic_float "
3892 "GL_NV_shader_buffer_load "
3893 "GL_NV_shader_storage_buffer_object "
3894 "GL_NV_shader_thread_group "
3895 "GL_NV_shader_thread_shuffle "
3896 "GL_NV_texgen_reflection "
3897 "GL_NV_texture_barrier "
3898 "GL_NV_texture_compression_vtc "
3899 "GL_NV_texture_env_combine4 "
3900 "GL_NV_texture_multisample "
3901 "GL_NV_texture_rectangle "
3902 "GL_NV_texture_shader "
3903 "GL_NV_texture_shader2 "
3904 "GL_NV_texture_shader3 "
3905 "GL_NV_transform_feedback "
3906 "GL_NV_transform_feedback2 "
3907 "GL_NV_uniform_buffer_unified_memory "
3908 "GL_NV_vertex_array_range "
3909 "GL_NV_vertex_array_range2 "
3910 "GL_NV_vertex_attrib_integer_64bit "
3911 "GL_NV_vertex_buffer_unified_memory "
3912 "GL_NV_vertex_program "
3913 "GL_NV_vertex_program1_1 "
3914 "GL_NV_vertex_program2 "
3915 "GL_NV_vertex_program2_option "
3916 "GL_NV_vertex_program3 "
3917 "GL_NV_video_capture "
3918 "GL_NVX_conditional_render "
3919 "GL_NVX_gpu_memory_info "
3920 "GL_NVX_nvenc_interop "
3921 "GL_S3_s3tc "
3922 "GL_SGIS_generate_mipmap "
3923 "GL_SGIS_texture_lod "
3924 "GL_SGIX_depth_texture "
3925 "GL_SGIX_shadow "
3926 "GL_SUN_slice_accum "
3927 //"GL_WIN_swap_hint "
3928 "WGL_ARB_buffer_region "
3929 "WGL_ARB_context_flush_control "
3930 "WGL_ARB_create_context "
3931 "WGL_ARB_create_context_profile "
3932 "WGL_ARB_create_context_robustness "
3933 "WGL_ARB_extensions_string "
3934 "WGL_ARB_make_current_read "
3935 "WGL_ARB_multisample "
3936 "WGL_ARB_pbuffer "
3937 "WGL_ARB_pixel_format "
3938 "WGL_ARB_pixel_format_float "
3939 "WGL_ARB_render_texture "
3940 "WGL_ATI_pixel_format_float "
3941 "WGL_EXT_create_context_es2_profile "
3942 "WGL_EXT_create_context_es_profile "
3943 "WGL_EXT_extensions_string "
3944 "WGL_EXT_framebuffer_sRGB "
3945 "WGL_EXT_pixel_format_packed_float "
3946 "WGL_EXT_swap_control "
3947 "WGL_EXT_swap_control_tear "
3948 "WGL_NV_copy_image "
3949 "WGL_NV_delay_before_swap "
3950 "WGL_NV_DX_interop "
3951 "WGL_NV_DX_interop2 "
3952 "WGL_NV_float_buffer "
3953 "WGL_NV_gpu_affinity "
3954 "WGL_NV_multisample_coverage "
3955 "WGL_NV_render_depth_texture "
3956 "WGL_NV_render_texture_rectangle "
3957 "WGL_NV_swap_group "
3958 "WGL_NV_video_capture "
3959 "WGL_NVX_DX_interop";
3960
3961
3962 /*"WGL_ARB_extensions_string "
3963 "GL_ARB_extensions_string "
3964 "WGL_ARB_create_context "
3965 "GL_ARB_create_context "
3966 "GL_ARB_texture_non_power_of_two "
3967 "GL_ARB_framebuffer_object "
3968 "GL_ARB_fragment_shader "
3969 "GL_ARB_vertex_shader "
3970 "GL_ARB_shader_objects "
3971 "GL_ARB_shading_language_100 "
3972 "GL_EXT_framebuffer_object "
3973 "GL_EXT_blend_minmax "
3974 "GL_EXT_depth_texture "
3975 "GL_EXT_depth_texture_cube_map "
3976 "GL_EXT_element_index_uint "
3977 "GL_EXT_packed_depth_stencil "
3978 "GL_EXT_rgb8_rgba8 "
3979 "GL_EXT_standard_derivatives "
3980 "GL_EXT_texture_float "
3981 "GL_EXT_texture_float_linear "
3982 "GL_EXT_texture_half_float "
3983 "GL_EXT_texture_half_float_linear "
3984 "GL_EXT_texture_npot "
3985 "GL_EXT_occlusion_query_boolean "
3986 "GL_EXT_read_format_bgra "
3987 #if (S3TC_SUPPORT)
3988 "GL_EXT_texture_compression_dxt1 "
3989 #endif
3990 "GL_EXT_blend_func_separate "
3991 "GL_EXT_secondary_color "
3992 "GL_EXT_texture_filter_anisotropic "
3993 "GL_EXT_texture_format_BGRA8888 "
3994 "GL_EXT_framebuffer_blit "
3995 "GL_EXT_framebuffer_multisample "
3996 #if (S3TC_SUPPORT)
3997 "GL_EXT_texture_compression_dxt3 "
3998 "GL_EXT_texture_compression_dxt5 "
3999 #endif
4000 "GL_NV_fence";*/
4001
4002
4003
4004 /*"GL_AMD_multi_draw_indirect "
4005 "GL_AMD_seamless_cubemap_per_texture "
4006 "GL_ARB_arrays_of_arrays "
4007 "GL_ARB_base_instance "
4008 "GL_ARB_bindless_texture "
4009 "GL_ARB_blend_func_extended "
4010 "GL_ARB_buffer_storage "
4011 "GL_ARB_clear_buffer_object "
4012 "GL_ARB_clear_texture "
4013 "GL_ARB_color_buffer_float "
4014 "GL_ARB_compatibility "
4015 "GL_ARB_compressed_texture_pixel_storage "
4016 "GL_ARB_conservative_depth "
4017 "GL_ARB_compute_shader "
4018 "GL_ARB_compute_variable_group_size "
4019 "GL_ARB_copy_buffer "
4020 "GL_ARB_copy_image "
4021 "GL_ARB_debug_output "
4022 "GL_ARB_depth_buffer_float "
4023 "GL_ARB_depth_clamp "
4024 "GL_ARB_depth_texture "
4025 "GL_ARB_draw_buffers "
4026 "GL_ARB_draw_buffers_blend "
4027 "GL_ARB_draw_indirect "
4028 "GL_ARB_draw_elements_base_vertex "
4029 "GL_ARB_draw_instanced "
4030 "GL_ARB_enhanced_layouts "
4031 "GL_ARB_ES2_compatibility "
4032 "GL_ARB_ES3_compatibility "
4033 "GL_ARB_explicit_attrib_location "
4034 "GL_ARB_explicit_uniform_location "
4035 "GL_ARB_fragment_coord_conventions "
4036 "GL_ARB_fragment_layer_viewport "
4037 "GL_ARB_fragment_program "
4038 "GL_ARB_fragment_program_shadow "
4039 "GL_ARB_fragment_shader "
4040 "GL_ARB_framebuffer_no_attachments "
4041 "GL_ARB_framebuffer_object "
4042 "GL_ARB_framebuffer_sRGB "
4043 "GL_ARB_geometry_shader4 "
4044 "GL_ARB_get_program_binary "
4045 "GL_ARB_gpu_shader5 "
4046 "GL_ARB_gpu_shader_fp64 "
4047 "GL_ARB_half_float_pixel "
4048 "GL_ARB_half_float_vertex "
4049 "GL_ARB_indirect_parameters "
4050 "GL_ARB_instanced_arrays "
4051 "GL_ARB_internalformat_query "
4052 "GL_ARB_internalformat_query2 "
4053 "GL_ARB_invalidate_subdata "
4054 "GL_ARB_map_buffer_alignment "
4055 "GL_ARB_map_buffer_range "
4056 "GL_ARB_multi_bind "
4057 "GL_ARB_multi_draw_indirect "
4058 "GL_ARB_multisample "
4059 "GL_ARB_multitexture "
4060 "GL_ARB_occlusion_query "
4061 "GL_ARB_occlusion_query2 "
4062 "GL_ARB_pixel_buffer_object "
4063 "GL_ARB_point_parameters "
4064 "GL_ARB_point_sprite "
4065 "GL_ARB_program_interface_query "
4066 "GL_ARB_provoking_vertex "
4067 "GL_ARB_robust_buffer_access_behavior "
4068 "GL_ARB_robustness "
4069 "GL_ARB_sample_shading "
4070 "GL_ARB_sampler_objects "
4071 "GL_ARB_seamless_cube_map "
4072 "GL_ARB_seamless_cubemap_per_texture "
4073 "GL_ARB_separate_shader_objects "
4074 "GL_ARB_shader_atomic_counters "
4075 "GL_ARB_shader_bit_encoding "
4076 "GL_ARB_shader_draw_parameters "
4077 "GL_ARB_shader_group_vote "
4078 "GL_ARB_shader_image_load_store "
4079 "GL_ARB_shader_image_size "
4080 "GL_ARB_shader_objects "
4081 "GL_ARB_shader_precision "
4082 "GL_ARB_query_buffer_object "
4083 "GL_ARB_shader_storage_buffer_object "
4084 "GL_ARB_shader_subroutine "
4085 "GL_ARB_shader_texture_lod "
4086 "GL_ARB_shading_language_100 "
4087 "GL_ARB_shading_language_420pack "
4088 "GL_ARB_shading_language_include "
4089 "GL_ARB_shading_language_packing "
4090 "GL_ARB_shadow "
4091 "GL_ARB_sparse_texture "
4092 "GL_ARB_stencil_texturing "
4093 "GL_ARB_sync "
4094 "GL_ARB_tessellation_shader "
4095 "GL_ARB_texture_border_clamp "
4096 "GL_ARB_texture_buffer_object "
4097 "GL_ARB_texture_buffer_object_rgb32 "
4098 "GL_ARB_texture_buffer_range "
4099 "GL_ARB_texture_compression "
4100 "GL_ARB_texture_compression_bptc "
4101 "GL_ARB_texture_compression_rgtc "
4102 "GL_ARB_texture_cube_map "
4103 "GL_ARB_texture_cube_map_array "
4104 "GL_ARB_texture_env_add "
4105 "GL_ARB_texture_env_combine "
4106 "GL_ARB_texture_env_crossbar "
4107 "GL_ARB_texture_env_dot3 "
4108 "GL_ARB_texture_float "
4109 "GL_ARB_texture_gather "
4110 "GL_ARB_texture_mirror_clamp_to_edge "
4111 "GL_ARB_texture_mirrored_repeat "
4112 "GL_ARB_texture_multisample "
4113 "GL_ARB_texture_non_power_of_two "
4114 "GL_ARB_texture_query_levels "
4115 "GL_ARB_texture_query_lod "
4116 "GL_ARB_texture_rectangle "
4117 "GL_ARB_texture_rg "
4118 "GL_ARB_texture_rgb10_a2ui "
4119 "GL_ARB_texture_stencil8 "
4120 "GL_ARB_texture_storage "
4121 "GL_ARB_texture_storage_multisample "
4122 "GL_ARB_texture_swizzle "
4123 "GL_ARB_texture_view "
4124 "GL_ARB_timer_query "
4125 "GL_ARB_transform_feedback2 "
4126 "GL_ARB_transform_feedback3 "
4127 "GL_ARB_transform_feedback_instanced "
4128 "GL_ARB_transpose_matrix "
4129 "GL_ARB_uniform_buffer_object "
4130 "GL_ARB_vertex_array_bgra "
4131 "GL_ARB_vertex_array_object "
4132 "GL_ARB_vertex_attrib_64bit "
4133 "GL_ARB_vertex_attrib_binding "
4134 "GL_ARB_vertex_buffer_object "
4135 "GL_ARB_vertex_program "
4136 "GL_ARB_vertex_shader "
4137 "GL_ARB_vertex_type_10f_11f_11f_rev "
4138 "GL_ARB_vertex_type_2_10_10_10_rev "
4139 "GL_ARB_viewport_array "
4140 "GL_ARB_window_pos "
4141 "GL_ATI_draw_buffers "
4142 "GL_ATI_texture_float "
4143 "GL_ATI_texture_mirror_once "
4144 "GL_S3_s3tc "
4145 "GL_EXT_abgr "
4146 "GL_EXT_bgra "
4147 "GL_EXT_bindable_uniform "
4148 "GL_EXT_blend_color "
4149 "GL_EXT_blend_equation_separate "
4150 "GL_EXT_blend_func_separate "
4151 "GL_EXT_blend_minmax "
4152 "GL_EXT_blend_subtract "
4153 "GL_EXT_compiled_vertex_array "
4154 "GL_EXT_Cg_shader "
4155 "GL_EXT_depth_bounds_test "
4156 "GL_EXT_direct_state_access "
4157 "GL_EXT_draw_buffers2 "
4158 "GL_EXT_draw_instanced "
4159 "GL_EXT_draw_range_elements "
4160 "GL_EXT_fog_coord "
4161 "GL_EXT_framebuffer_blit "
4162 "GL_EXT_framebuffer_multisample "
4163 "GL_EXT_framebuffer_multisample_blit_scaled "
4164 "GL_EXT_framebuffer_object "
4165 "GL_EXT_framebuffer_sRGB "
4166 "GL_EXT_geometry_shader4 "
4167 "GL_EXT_gpu_program_parameters "
4168 "GL_EXT_gpu_shader4 "
4169 "GL_EXT_multi_draw_arrays "
4170 "GL_EXT_packed_depth_stencil "
4171 "GL_EXT_packed_float "
4172 "GL_EXT_packed_pixels "
4173 "GL_EXT_pixel_buffer_object "
4174 "GL_EXT_point_parameters "
4175 "GL_EXT_post_depth_coverage "
4176 "GL_EXT_provoking_vertex "
4177 "GL_EXT_rescale_normal "
4178 "GL_EXT_raster_multisample "
4179 "GL_EXT_secondary_color "
4180 "GL_EXT_separate_shader_objects "
4181 "GL_EXT_separate_specular_color "
4182 "GL_EXT_shader_image_load_formatted "
4183 "GL_EXT_shader_image_load_store "
4184 "GL_EXT_shader_integer_mix "
4185 "GL_EXT_shadow_funcs "
4186 "GL_EXT_sparse_texture2 "
4187 "GL_EXT_stencil_two_side "
4188 "GL_EXT_stencil_wrap "
4189 "GL_EXT_texture3D "
4190 "GL_EXT_texture_array "
4191 "GL_EXT_texture_buffer_object "
4192 "GL_EXT_texture_compression_dxt1 "
4193 "GL_EXT_texture_compression_latc "
4194 "GL_EXT_texture_compression_rgtc "
4195 "GL_EXT_texture_compression_s3tc "
4196 "GL_EXT_texture_cube_map "
4197 "GL_EXT_texture_edge_clamp "
4198 "GL_EXT_texture_env_add "
4199 "GL_EXT_texture_env_combine "
4200 "GL_EXT_texture_env_dot3 "
4201 "GL_EXT_texture_filter_anisotropic "
4202 "GL_EXT_texture_filter_minmax "
4203 "GL_EXT_texture_integer "
4204 "GL_EXT_texture_lod_bias "
4205 "GL_EXT_texture_mirror_clamp "
4206 "GL_EXT_texture_object "
4207 "GL_EXT_texture_shared_exponent "
4208 "GL_EXT_texture_sRGB "
4209 "GL_EXT_texture_sRGB_decode "
4210 "GL_EXT_texture_swizzle "
4211 "GL_EXT_timer_query "
4212 "GL_EXT_transform_feedback2 "
4213 "GL_EXT_vertex_array "
4214 "GL_EXT_vertex_array_bgra "
4215 "GL_EXT_vertex_attrib_64bit "
4216 "GL_EXT_import_sync_object "
4217 "GL_KHR_debug "
4218 "GL_NV_bindless_multi_draw_indirect "
4219 "GL_NV_bindless_texture "
4220 "GL_NV_blend_equation_advanced "
4221 "GL_NV_blend_square "
4222 "GL_NV_command_list "
4223 "GL_NV_compute_program5 "
4224 "GL_NV_conditional_render "
4225 "GL_NV_conservative_raster "
4226 "GL_NV_copy_depth_to_color "
4227 "GL_NV_copy_image "
4228 "GL_NV_deep_texture3D "
4229 "GL_NV_depth_buffer_float "
4230 "GL_NV_depth_clamp "
4231 "GL_NV_draw_texture "
4232 "GL_NV_explicit_multisample "
4233 "GL_NV_fence "
4234 "GL_NV_fill_rectangle "
4235 "GL_NV_float_buffer "
4236 "GL_NV_fog_distance "
4237 "GL_NV_fragment_coverage_to_color "
4238 "GL_NV_fragment_program "
4239 "GL_NV_fragment_program_option "
4240 "GL_NV_fragment_program2 "
4241 "GL_NV_fragment_shader_interlock "
4242 "GL_NV_framebuffer_mixed_samples "
4243 "GL_NV_framebuffer_multisample_coverage "
4244 "GL_NV_geometry_shader_passthrough "
4245 "GL_NV_geometry_shader4 "
4246 "GL_NV_gpu_program4 "
4247 "GL_NV_gpu_program5 "
4248 "GL_NV_gpu_program5_mem_extended "
4249 "GL_NV_gpu_shader5 "
4250 "GL_NV_half_float "
4251 "GL_NV_light_max_exponent "
4252 "GL_NV_multisample_coverage "
4253 "GL_NV_multisample_filter_hint "
4254 "GL_NV_occlusion_query "
4255 "GL_NV_packed_depth_stencil "
4256 "GL_NV_parameter_buffer_object "
4257 "GL_NV_parameter_buffer_object2 "
4258 "GL_NV_path_rendering "
4259 "GL_NV_path_rendering_shared_edge "
4260 "GL_NV_pixel_data_range "
4261 "GL_NV_point_sprite "
4262 "GL_NV_primitive_restart "
4263 "GL_NV_register_combiners "
4264 "GL_NV_register_combiners2 "
4265 "GL_NV_sample_locations "
4266 "GL_NV_sample_mask_override_coverage "
4267 "GL_NV_shader_atomic_counters "
4268 "GL_NV_shader_atomic_fp16_vector "
4269 "GL_NV_shader_atomic_float "
4270 "GL_NV_shader_buffer_load "
4271 "GL_NV_shader_storage_buffer_object "
4272 "GL_NV_shader_thread_group "
4273 "GL_NV_shader_thread_shuffle "
4274 "GL_NV_texgen_reflection "
4275 "GL_NV_texture_barrier "
4276 "GL_NV_texture_compression_vtc "
4277 "GL_NV_texture_env_combine4 "
4278 "GL_NV_texture_expand_normal "
4279 "GL_NV_texture_multisample "
4280 "GL_NV_texture_rectangle "
4281 "GL_NV_texture_shader "
4282 "GL_NV_texture_shader2 "
4283 "GL_NV_texture_shader3 "
4284 "GL_NV_transform_feedback "
4285 "GL_NV_transform_feedback2 "
4286 "GL_NV_vertex_array_range "
4287 "GL_NV_vertex_array_range2 "
4288 "GL_NV_vertex_attrib_integer_64bit "
4289 "GL_NV_vertex_buffer_unified_memory "
4290 "GL_NV_vertex_program "
4291 "GL_NV_vertex_program1_1 "
4292 "GL_NV_vertex_program2 "
4293 "GL_NV_vertex_program2_option "
4294 "GL_NV_vertex_program3 "
4295 "GL_NV_video_capture "
4296 "GL_NVX_conditional_render "
4297 "GL_NVX_gpu_memory_info "
4298 "GL_SGIS_generate_mipmap "
4299 "GL_SGIS_texture_lod "
4300 "GL_SGIX_depth_texture "
4301 "GL_SGIX_shadow "
4302 "GL_SUN_slice_accum "
4303 "WGL_ARB_buffer_region "
4304 "WGL_ARB_create_context "
4305 "WGL_ARB_extensions_string "
4306 "WGL_ARB_pbuffer "
4307 "WGL_ARB_pixel_format "
4308 "WGL ARB render texture "
4309 "WGL ATI pixel_format_float "
4310 "WGL_EXT_extensions_string "
4311 "WGL_EXT_pbuffer "
4312 "WGL_EXT_pixel_format "
4313 "WGL_EXT_swap_control "
4314 "WGL_EXT_swap_control_tear "
4315 "WGL_NV_dx_interop "
4316 "WGL_NV_gpu_affinity "
4317 "WGL NV render depth texture "
4318 "WGL NV render texture rectangle "
4319 "WGL_NV_swap_group "
4320 "WGL_NV_video_out";*/
4321
4322
4323
Nicolas Capens264f1522015-01-09 17:21:17 -05004324 default:
4325 return error(GL_INVALID_ENUM, (GLubyte*)NULL);
4326 }
Nicolas Capensa9b49372015-01-30 00:33:26 -05004327
4328 return NULL;
Nicolas Capens264f1522015-01-09 17:21:17 -05004329}
4330
Nicolas Capensa9b49372015-01-30 00:33:26 -05004331void APIENTRY glGetTexParameterfv(GLenum target, GLenum pname, GLfloat* params)
Nicolas Capens264f1522015-01-09 17:21:17 -05004332{
Nicolas Capens4be33702015-04-28 15:13:30 -07004333 TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLfloat* params = %p)", target, pname, params);
Nicolas Capens264f1522015-01-09 17:21:17 -05004334
Nicolas Capensf4486fd2015-01-22 11:10:37 -05004335 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05004336
4337 if(context)
4338 {
Nicolas Capensf4486fd2015-01-22 11:10:37 -05004339 gl::Texture *texture;
Nicolas Capens264f1522015-01-09 17:21:17 -05004340
4341 switch(target)
4342 {
4343 case GL_TEXTURE_2D:
Nicolas Capensa9b49372015-01-30 00:33:26 -05004344 texture = context->getTexture2D(target);
Nicolas Capens264f1522015-01-09 17:21:17 -05004345 break;
4346 case GL_TEXTURE_CUBE_MAP:
4347 texture = context->getTextureCubeMap();
4348 break;
Nicolas Capens264f1522015-01-09 17:21:17 -05004349 default:
4350 return error(GL_INVALID_ENUM);
4351 }
4352
4353 switch(pname)
4354 {
4355 case GL_TEXTURE_MAG_FILTER:
4356 *params = (GLfloat)texture->getMagFilter();
4357 break;
4358 case GL_TEXTURE_MIN_FILTER:
4359 *params = (GLfloat)texture->getMinFilter();
4360 break;
4361 case GL_TEXTURE_WRAP_S:
4362 *params = (GLfloat)texture->getWrapS();
4363 break;
4364 case GL_TEXTURE_WRAP_T:
4365 *params = (GLfloat)texture->getWrapT();
4366 break;
4367 case GL_TEXTURE_MAX_ANISOTROPY_EXT:
4368 *params = texture->getMaxAnisotropy();
4369 break;
Nicolas Capens264f1522015-01-09 17:21:17 -05004370 default:
4371 return error(GL_INVALID_ENUM);
4372 }
4373 }
4374}
4375
Nicolas Capensa9b49372015-01-30 00:33:26 -05004376void APIENTRY glGetTexParameteriv(GLenum target, GLenum pname, GLint* params)
Nicolas Capens264f1522015-01-09 17:21:17 -05004377{
Nicolas Capens4be33702015-04-28 15:13:30 -07004378 TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint* params = %p)", target, pname, params);
Nicolas Capens264f1522015-01-09 17:21:17 -05004379
Nicolas Capensf4486fd2015-01-22 11:10:37 -05004380 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05004381
4382 if(context)
4383 {
Nicolas Capensf4486fd2015-01-22 11:10:37 -05004384 gl::Texture *texture;
Nicolas Capens264f1522015-01-09 17:21:17 -05004385
4386 switch(target)
4387 {
4388 case GL_TEXTURE_2D:
Nicolas Capensa9b49372015-01-30 00:33:26 -05004389 texture = context->getTexture2D(target);
Nicolas Capens264f1522015-01-09 17:21:17 -05004390 break;
4391 case GL_TEXTURE_CUBE_MAP:
4392 texture = context->getTextureCubeMap();
4393 break;
Nicolas Capens264f1522015-01-09 17:21:17 -05004394 default:
4395 return error(GL_INVALID_ENUM);
4396 }
4397
4398 switch(pname)
4399 {
4400 case GL_TEXTURE_MAG_FILTER:
4401 *params = texture->getMagFilter();
4402 break;
4403 case GL_TEXTURE_MIN_FILTER:
4404 *params = texture->getMinFilter();
4405 break;
4406 case GL_TEXTURE_WRAP_S:
4407 *params = texture->getWrapS();
4408 break;
4409 case GL_TEXTURE_WRAP_T:
4410 *params = texture->getWrapT();
4411 break;
4412 case GL_TEXTURE_MAX_ANISOTROPY_EXT:
4413 *params = (GLint)texture->getMaxAnisotropy();
4414 break;
Nicolas Capens264f1522015-01-09 17:21:17 -05004415 default:
4416 return error(GL_INVALID_ENUM);
4417 }
4418 }
4419}
4420
Nicolas Capensa9b49372015-01-30 00:33:26 -05004421void APIENTRY glGetnUniformfvEXT(GLuint program, GLint location, GLsizei bufSize, GLfloat* params)
Nicolas Capens264f1522015-01-09 17:21:17 -05004422{
Nicolas Capens4be33702015-04-28 15:13:30 -07004423 TRACE("(GLuint program = %d, GLint location = %d, GLsizei bufSize = %d, GLfloat* params = %p)",
Maxime Grégoire20942c02015-07-16 14:12:47 -04004424 program, location, bufSize, params);
Nicolas Capens264f1522015-01-09 17:21:17 -05004425
4426 if(bufSize < 0)
4427 {
4428 return error(GL_INVALID_VALUE);
4429 }
4430
Nicolas Capensf4486fd2015-01-22 11:10:37 -05004431 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05004432
4433 if(context)
4434 {
4435 if(program == 0)
4436 {
4437 return error(GL_INVALID_VALUE);
4438 }
4439
Nicolas Capensf4486fd2015-01-22 11:10:37 -05004440 gl::Program *programObject = context->getProgram(program);
Nicolas Capens264f1522015-01-09 17:21:17 -05004441
4442 if(!programObject || !programObject->isLinked())
4443 {
4444 return error(GL_INVALID_OPERATION);
4445 }
4446
4447 if(!programObject->getUniformfv(location, &bufSize, params))
4448 {
4449 return error(GL_INVALID_OPERATION);
4450 }
4451 }
4452}
4453
Nicolas Capensa9b49372015-01-30 00:33:26 -05004454void APIENTRY glGetUniformfv(GLuint program, GLint location, GLfloat* params)
Nicolas Capens264f1522015-01-09 17:21:17 -05004455{
Nicolas Capens4be33702015-04-28 15:13:30 -07004456 TRACE("(GLuint program = %d, GLint location = %d, GLfloat* params = %p)", program, location, params);
Nicolas Capens264f1522015-01-09 17:21:17 -05004457
Nicolas Capensf4486fd2015-01-22 11:10:37 -05004458 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05004459
4460 if(context)
4461 {
4462 if(program == 0)
4463 {
4464 return error(GL_INVALID_VALUE);
4465 }
4466
Nicolas Capensf4486fd2015-01-22 11:10:37 -05004467 gl::Program *programObject = context->getProgram(program);
Nicolas Capens264f1522015-01-09 17:21:17 -05004468
4469 if(!programObject || !programObject->isLinked())
4470 {
4471 return error(GL_INVALID_OPERATION);
4472 }
4473
4474 if(!programObject->getUniformfv(location, NULL, params))
4475 {
4476 return error(GL_INVALID_OPERATION);
4477 }
4478 }
4479}
4480
Nicolas Capensa9b49372015-01-30 00:33:26 -05004481void APIENTRY glGetnUniformivEXT(GLuint program, GLint location, GLsizei bufSize, GLint* params)
Nicolas Capens264f1522015-01-09 17:21:17 -05004482{
Nicolas Capens4be33702015-04-28 15:13:30 -07004483 TRACE("(GLuint program = %d, GLint location = %d, GLsizei bufSize = %d, GLint* params = %p)",
Maxime Grégoire20942c02015-07-16 14:12:47 -04004484 program, location, bufSize, params);
Nicolas Capens264f1522015-01-09 17:21:17 -05004485
4486 if(bufSize < 0)
4487 {
4488 return error(GL_INVALID_VALUE);
4489 }
4490
Nicolas Capensf4486fd2015-01-22 11:10:37 -05004491 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05004492
4493 if(context)
4494 {
4495 if(program == 0)
4496 {
4497 return error(GL_INVALID_VALUE);
4498 }
4499
Nicolas Capensf4486fd2015-01-22 11:10:37 -05004500 gl::Program *programObject = context->getProgram(program);
Nicolas Capens264f1522015-01-09 17:21:17 -05004501
4502 if(!programObject || !programObject->isLinked())
4503 {
4504 return error(GL_INVALID_OPERATION);
4505 }
4506
4507 if(!programObject)
4508 {
4509 return error(GL_INVALID_OPERATION);
4510 }
4511
4512 if(!programObject->getUniformiv(location, &bufSize, params))
4513 {
4514 return error(GL_INVALID_OPERATION);
4515 }
4516 }
4517}
4518
Nicolas Capensa9b49372015-01-30 00:33:26 -05004519void APIENTRY glGetUniformiv(GLuint program, GLint location, GLint* params)
Nicolas Capens264f1522015-01-09 17:21:17 -05004520{
Nicolas Capens4be33702015-04-28 15:13:30 -07004521 TRACE("(GLuint program = %d, GLint location = %d, GLint* params = %p)", program, location, params);
Nicolas Capens264f1522015-01-09 17:21:17 -05004522
Nicolas Capensf4486fd2015-01-22 11:10:37 -05004523 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05004524
4525 if(context)
4526 {
4527 if(program == 0)
4528 {
4529 return error(GL_INVALID_VALUE);
4530 }
4531
Nicolas Capensf4486fd2015-01-22 11:10:37 -05004532 gl::Program *programObject = context->getProgram(program);
Nicolas Capens264f1522015-01-09 17:21:17 -05004533
4534 if(!programObject || !programObject->isLinked())
4535 {
4536 return error(GL_INVALID_OPERATION);
4537 }
4538
4539 if(!programObject)
4540 {
4541 return error(GL_INVALID_OPERATION);
4542 }
4543
4544 if(!programObject->getUniformiv(location, NULL, params))
4545 {
4546 return error(GL_INVALID_OPERATION);
4547 }
4548 }
4549}
4550
Nicolas Capensa9b49372015-01-30 00:33:26 -05004551int APIENTRY glGetUniformLocation(GLuint program, const GLchar* name)
Nicolas Capens264f1522015-01-09 17:21:17 -05004552{
4553 TRACE("(GLuint program = %d, const GLchar* name = %s)", program, name);
4554
Nicolas Capensf4486fd2015-01-22 11:10:37 -05004555 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05004556
4557 if(strstr(name, "gl_") == name)
4558 {
4559 return -1;
4560 }
4561
4562 if(context)
4563 {
Nicolas Capensf4486fd2015-01-22 11:10:37 -05004564 gl::Program *programObject = context->getProgram(program);
Nicolas Capens264f1522015-01-09 17:21:17 -05004565
4566 if(!programObject)
4567 {
4568 if(context->getShader(program))
4569 {
4570 return error(GL_INVALID_OPERATION, -1);
4571 }
4572 else
4573 {
4574 return error(GL_INVALID_VALUE, -1);
4575 }
4576 }
4577
4578 if(!programObject->isLinked())
4579 {
4580 return error(GL_INVALID_OPERATION, -1);
4581 }
4582
4583 return programObject->getUniformLocation(name);
4584 }
4585
4586 return -1;
4587}
4588
Nicolas Capensa9b49372015-01-30 00:33:26 -05004589void APIENTRY glGetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params)
Nicolas Capens264f1522015-01-09 17:21:17 -05004590{
Nicolas Capens4be33702015-04-28 15:13:30 -07004591 TRACE("(GLuint index = %d, GLenum pname = 0x%X, GLfloat* params = %p)", index, pname, params);
Nicolas Capens264f1522015-01-09 17:21:17 -05004592
Nicolas Capensf4486fd2015-01-22 11:10:37 -05004593 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05004594
4595 if(context)
4596 {
Nicolas Capensf4486fd2015-01-22 11:10:37 -05004597 if(index >= gl::MAX_VERTEX_ATTRIBS)
Nicolas Capens264f1522015-01-09 17:21:17 -05004598 {
4599 return error(GL_INVALID_VALUE);
4600 }
4601
Nicolas Capensf4486fd2015-01-22 11:10:37 -05004602 const gl::VertexAttribute &attribState = context->getVertexAttribState(index);
Nicolas Capens264f1522015-01-09 17:21:17 -05004603
4604 switch(pname)
4605 {
4606 case GL_VERTEX_ATTRIB_ARRAY_ENABLED:
4607 *params = (GLfloat)(attribState.mArrayEnabled ? GL_TRUE : GL_FALSE);
4608 break;
4609 case GL_VERTEX_ATTRIB_ARRAY_SIZE:
4610 *params = (GLfloat)attribState.mSize;
4611 break;
4612 case GL_VERTEX_ATTRIB_ARRAY_STRIDE:
4613 *params = (GLfloat)attribState.mStride;
4614 break;
4615 case GL_VERTEX_ATTRIB_ARRAY_TYPE:
4616 *params = (GLfloat)attribState.mType;
4617 break;
4618 case GL_VERTEX_ATTRIB_ARRAY_NORMALIZED:
4619 *params = (GLfloat)(attribState.mNormalized ? GL_TRUE : GL_FALSE);
4620 break;
4621 case GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING:
Nicolas Capens7cc75e12015-01-29 14:44:24 -05004622 *params = (GLfloat)attribState.mBoundBuffer.name();
Nicolas Capens264f1522015-01-09 17:21:17 -05004623 break;
4624 case GL_CURRENT_VERTEX_ATTRIB:
4625 for(int i = 0; i < 4; ++i)
4626 {
4627 params[i] = attribState.mCurrentValue[i];
4628 }
4629 break;
4630 default: return error(GL_INVALID_ENUM);
4631 }
4632 }
4633}
4634
Nicolas Capensa9b49372015-01-30 00:33:26 -05004635void APIENTRY glGetVertexAttribiv(GLuint index, GLenum pname, GLint* params)
Nicolas Capens264f1522015-01-09 17:21:17 -05004636{
Nicolas Capens4be33702015-04-28 15:13:30 -07004637 TRACE("(GLuint index = %d, GLenum pname = 0x%X, GLint* params = %p)", index, pname, params);
Nicolas Capens264f1522015-01-09 17:21:17 -05004638
Nicolas Capensf4486fd2015-01-22 11:10:37 -05004639 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05004640
4641 if(context)
4642 {
Nicolas Capensf4486fd2015-01-22 11:10:37 -05004643 if(index >= gl::MAX_VERTEX_ATTRIBS)
Nicolas Capens264f1522015-01-09 17:21:17 -05004644 {
4645 return error(GL_INVALID_VALUE);
4646 }
4647
Nicolas Capensf4486fd2015-01-22 11:10:37 -05004648 const gl::VertexAttribute &attribState = context->getVertexAttribState(index);
Nicolas Capens264f1522015-01-09 17:21:17 -05004649
4650 switch(pname)
4651 {
4652 case GL_VERTEX_ATTRIB_ARRAY_ENABLED:
4653 *params = (attribState.mArrayEnabled ? GL_TRUE : GL_FALSE);
4654 break;
4655 case GL_VERTEX_ATTRIB_ARRAY_SIZE:
4656 *params = attribState.mSize;
4657 break;
4658 case GL_VERTEX_ATTRIB_ARRAY_STRIDE:
4659 *params = attribState.mStride;
4660 break;
4661 case GL_VERTEX_ATTRIB_ARRAY_TYPE:
4662 *params = attribState.mType;
4663 break;
4664 case GL_VERTEX_ATTRIB_ARRAY_NORMALIZED:
4665 *params = (attribState.mNormalized ? GL_TRUE : GL_FALSE);
4666 break;
4667 case GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING:
Nicolas Capens7cc75e12015-01-29 14:44:24 -05004668 *params = attribState.mBoundBuffer.name();
Nicolas Capens264f1522015-01-09 17:21:17 -05004669 break;
4670 case GL_CURRENT_VERTEX_ATTRIB:
4671 for(int i = 0; i < 4; ++i)
4672 {
4673 float currentValue = attribState.mCurrentValue[i];
4674 params[i] = (GLint)(currentValue > 0.0f ? floor(currentValue + 0.5f) : ceil(currentValue - 0.5f));
4675 }
4676 break;
4677 default: return error(GL_INVALID_ENUM);
4678 }
4679 }
4680}
4681
Nicolas Capensa9b49372015-01-30 00:33:26 -05004682void APIENTRY glGetVertexAttribPointerv(GLuint index, GLenum pname, GLvoid** pointer)
Nicolas Capens264f1522015-01-09 17:21:17 -05004683{
Nicolas Capens4be33702015-04-28 15:13:30 -07004684 TRACE("(GLuint index = %d, GLenum pname = 0x%X, GLvoid** pointer = %p)", index, pname, pointer);
Nicolas Capens264f1522015-01-09 17:21:17 -05004685
Nicolas Capensf4486fd2015-01-22 11:10:37 -05004686 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05004687
4688 if(context)
4689 {
Nicolas Capensf4486fd2015-01-22 11:10:37 -05004690 if(index >= gl::MAX_VERTEX_ATTRIBS)
Nicolas Capens264f1522015-01-09 17:21:17 -05004691 {
4692 return error(GL_INVALID_VALUE);
4693 }
4694
4695 if(pname != GL_VERTEX_ATTRIB_ARRAY_POINTER)
4696 {
4697 return error(GL_INVALID_ENUM);
4698 }
4699
4700 *pointer = const_cast<GLvoid*>(context->getVertexAttribPointer(index));
4701 }
4702}
4703
Nicolas Capensa9b49372015-01-30 00:33:26 -05004704void APIENTRY glHint(GLenum target, GLenum mode)
Nicolas Capens264f1522015-01-09 17:21:17 -05004705{
4706 TRACE("(GLenum target = 0x%X, GLenum mode = 0x%X)", target, mode);
4707
4708 switch(mode)
4709 {
4710 case GL_FASTEST:
4711 case GL_NICEST:
4712 case GL_DONT_CARE:
4713 break;
4714 default:
4715 return error(GL_INVALID_ENUM);
4716 }
4717
Nicolas Capensf4486fd2015-01-22 11:10:37 -05004718 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05004719 switch(target)
4720 {
4721 case GL_GENERATE_MIPMAP_HINT:
4722 if(context) context->setGenerateMipmapHint(mode);
4723 break;
Nicolas Capensa9b49372015-01-30 00:33:26 -05004724 case GL_FRAGMENT_SHADER_DERIVATIVE_HINT:
Nicolas Capens264f1522015-01-09 17:21:17 -05004725 if(context) context->setFragmentShaderDerivativeHint(mode);
4726 break;
4727 default:
4728 return error(GL_INVALID_ENUM);
4729 }
4730}
4731
Nicolas Capensa9b49372015-01-30 00:33:26 -05004732GLboolean APIENTRY glIsBuffer(GLuint buffer)
Nicolas Capens264f1522015-01-09 17:21:17 -05004733{
4734 TRACE("(GLuint buffer = %d)", buffer);
4735
Nicolas Capensf4486fd2015-01-22 11:10:37 -05004736 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05004737
4738 if(context && buffer)
4739 {
Nicolas Capensf4486fd2015-01-22 11:10:37 -05004740 gl::Buffer *bufferObject = context->getBuffer(buffer);
Nicolas Capens264f1522015-01-09 17:21:17 -05004741
4742 if(bufferObject)
4743 {
4744 return GL_TRUE;
4745 }
4746 }
4747
4748 return GL_FALSE;
4749}
4750
Nicolas Capensa9b49372015-01-30 00:33:26 -05004751GLboolean APIENTRY glIsEnabled(GLenum cap)
Nicolas Capens264f1522015-01-09 17:21:17 -05004752{
4753 TRACE("(GLenum cap = 0x%X)", cap);
4754
Nicolas Capensf4486fd2015-01-22 11:10:37 -05004755 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05004756
4757 if(context)
4758 {
4759 switch(cap)
4760 {
4761 case GL_CULL_FACE: return context->isCullFaceEnabled();
4762 case GL_POLYGON_OFFSET_FILL: return context->isPolygonOffsetFillEnabled();
4763 case GL_SAMPLE_ALPHA_TO_COVERAGE: return context->isSampleAlphaToCoverageEnabled();
4764 case GL_SAMPLE_COVERAGE: return context->isSampleCoverageEnabled();
4765 case GL_SCISSOR_TEST: return context->isScissorTestEnabled();
4766 case GL_STENCIL_TEST: return context->isStencilTestEnabled();
4767 case GL_DEPTH_TEST: return context->isDepthTestEnabled();
4768 case GL_BLEND: return context->isBlendEnabled();
4769 case GL_DITHER: return context->isDitherEnabled();
4770 default:
4771 return error(GL_INVALID_ENUM, false);
4772 }
4773 }
4774
4775 return false;
4776}
4777
Nicolas Capensa9b49372015-01-30 00:33:26 -05004778GLboolean APIENTRY glIsFenceNV(GLuint fence)
Nicolas Capens264f1522015-01-09 17:21:17 -05004779{
4780 TRACE("(GLuint fence = %d)", fence);
4781
Nicolas Capensf4486fd2015-01-22 11:10:37 -05004782 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05004783
4784 if(context)
4785 {
Nicolas Capensf4486fd2015-01-22 11:10:37 -05004786 gl::Fence *fenceObject = context->getFence(fence);
Nicolas Capens264f1522015-01-09 17:21:17 -05004787
4788 if(fenceObject == NULL)
4789 {
4790 return GL_FALSE;
4791 }
4792
4793 return fenceObject->isFence();
4794 }
4795
4796 return GL_FALSE;
4797}
4798
Nicolas Capensa9b49372015-01-30 00:33:26 -05004799GLboolean APIENTRY glIsFramebuffer(GLuint framebuffer)
Nicolas Capens264f1522015-01-09 17:21:17 -05004800{
4801 TRACE("(GLuint framebuffer = %d)", framebuffer);
4802
Nicolas Capensf4486fd2015-01-22 11:10:37 -05004803 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05004804
4805 if(context && framebuffer)
4806 {
Nicolas Capensf4486fd2015-01-22 11:10:37 -05004807 gl::Framebuffer *framebufferObject = context->getFramebuffer(framebuffer);
Nicolas Capens264f1522015-01-09 17:21:17 -05004808
4809 if(framebufferObject)
4810 {
4811 return GL_TRUE;
4812 }
4813 }
4814
4815 return GL_FALSE;
4816}
4817
Nicolas Capensa9b49372015-01-30 00:33:26 -05004818GLboolean APIENTRY glIsProgram(GLuint program)
Nicolas Capens264f1522015-01-09 17:21:17 -05004819{
4820 TRACE("(GLuint program = %d)", program);
4821
Nicolas Capensf4486fd2015-01-22 11:10:37 -05004822 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05004823
4824 if(context && program)
4825 {
Nicolas Capensf4486fd2015-01-22 11:10:37 -05004826 gl::Program *programObject = context->getProgram(program);
Nicolas Capens264f1522015-01-09 17:21:17 -05004827
4828 if(programObject)
4829 {
4830 return GL_TRUE;
4831 }
4832 }
4833
4834 return GL_FALSE;
4835}
4836
Nicolas Capensa9b49372015-01-30 00:33:26 -05004837GLboolean APIENTRY glIsQueryEXT(GLuint name)
Nicolas Capens264f1522015-01-09 17:21:17 -05004838{
Nicolas Capens7cc75e12015-01-29 14:44:24 -05004839 TRACE("(GLuint name = %d)", name);
Nicolas Capens264f1522015-01-09 17:21:17 -05004840
Nicolas Capens7cc75e12015-01-29 14:44:24 -05004841 if(name == 0)
Nicolas Capens264f1522015-01-09 17:21:17 -05004842 {
4843 return GL_FALSE;
4844 }
4845
Nicolas Capensf4486fd2015-01-22 11:10:37 -05004846 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05004847
4848 if(context)
4849 {
Nicolas Capens7cc75e12015-01-29 14:44:24 -05004850 gl::Query *queryObject = context->getQuery(name, false, GL_NONE);
Nicolas Capens264f1522015-01-09 17:21:17 -05004851
4852 if(queryObject)
4853 {
4854 return GL_TRUE;
4855 }
4856 }
4857
4858 return GL_FALSE;
4859}
4860
Nicolas Capensa9b49372015-01-30 00:33:26 -05004861GLboolean APIENTRY glIsRenderbuffer(GLuint renderbuffer)
Nicolas Capens264f1522015-01-09 17:21:17 -05004862{
4863 TRACE("(GLuint renderbuffer = %d)", renderbuffer);
4864
Nicolas Capensf4486fd2015-01-22 11:10:37 -05004865 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05004866
4867 if(context && renderbuffer)
4868 {
Nicolas Capensf4486fd2015-01-22 11:10:37 -05004869 gl::Renderbuffer *renderbufferObject = context->getRenderbuffer(renderbuffer);
Nicolas Capens264f1522015-01-09 17:21:17 -05004870
4871 if(renderbufferObject)
4872 {
4873 return GL_TRUE;
4874 }
4875 }
4876
4877 return GL_FALSE;
4878}
4879
Nicolas Capensa9b49372015-01-30 00:33:26 -05004880GLboolean APIENTRY glIsShader(GLuint shader)
Nicolas Capens264f1522015-01-09 17:21:17 -05004881{
4882 TRACE("(GLuint shader = %d)", shader);
4883
Nicolas Capensf4486fd2015-01-22 11:10:37 -05004884 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05004885
4886 if(context && shader)
4887 {
Nicolas Capensf4486fd2015-01-22 11:10:37 -05004888 gl::Shader *shaderObject = context->getShader(shader);
Nicolas Capens264f1522015-01-09 17:21:17 -05004889
4890 if(shaderObject)
4891 {
4892 return GL_TRUE;
4893 }
4894 }
4895
4896 return GL_FALSE;
4897}
4898
Nicolas Capensa9b49372015-01-30 00:33:26 -05004899GLboolean APIENTRY glIsTexture(GLuint texture)
Nicolas Capens264f1522015-01-09 17:21:17 -05004900{
4901 TRACE("(GLuint texture = %d)", texture);
4902
Nicolas Capensf4486fd2015-01-22 11:10:37 -05004903 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05004904
4905 if(context && texture)
4906 {
Nicolas Capensf4486fd2015-01-22 11:10:37 -05004907 gl::Texture *textureObject = context->getTexture(texture);
Nicolas Capens264f1522015-01-09 17:21:17 -05004908
4909 if(textureObject)
4910 {
4911 return GL_TRUE;
4912 }
4913 }
4914
4915 return GL_FALSE;
4916}
4917
Nicolas Capensa9b49372015-01-30 00:33:26 -05004918void APIENTRY glLineWidth(GLfloat width)
Nicolas Capens264f1522015-01-09 17:21:17 -05004919{
4920 TRACE("(GLfloat width = %f)", width);
4921
4922 if(width <= 0.0f)
4923 {
4924 return error(GL_INVALID_VALUE);
4925 }
4926
Nicolas Capensf4486fd2015-01-22 11:10:37 -05004927 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05004928
4929 if(context)
4930 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05004931 if(context->getListIndex() != 0)
4932 {
4933 UNIMPLEMENTED();
4934 }
4935
Nicolas Capens264f1522015-01-09 17:21:17 -05004936 context->setLineWidth(width);
4937 }
4938}
4939
Nicolas Capensa9b49372015-01-30 00:33:26 -05004940void APIENTRY glLinkProgram(GLuint program)
Nicolas Capens264f1522015-01-09 17:21:17 -05004941{
4942 TRACE("(GLuint program = %d)", program);
4943
Nicolas Capensf4486fd2015-01-22 11:10:37 -05004944 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05004945
4946 if(context)
4947 {
Nicolas Capensf4486fd2015-01-22 11:10:37 -05004948 gl::Program *programObject = context->getProgram(program);
Nicolas Capens264f1522015-01-09 17:21:17 -05004949
4950 if(!programObject)
4951 {
4952 if(context->getShader(program))
4953 {
4954 return error(GL_INVALID_OPERATION);
4955 }
4956 else
4957 {
4958 return error(GL_INVALID_VALUE);
4959 }
4960 }
4961
4962 programObject->link();
4963 }
4964}
4965
Nicolas Capensa9b49372015-01-30 00:33:26 -05004966void APIENTRY glPixelStorei(GLenum pname, GLint param)
Nicolas Capens264f1522015-01-09 17:21:17 -05004967{
4968 TRACE("(GLenum pname = 0x%X, GLint param = %d)", pname, param);
4969
Nicolas Capensf4486fd2015-01-22 11:10:37 -05004970 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05004971
4972 if(context)
4973 {
4974 switch(pname)
4975 {
4976 case GL_UNPACK_ALIGNMENT:
4977 if(param != 1 && param != 2 && param != 4 && param != 8)
4978 {
4979 return error(GL_INVALID_VALUE);
4980 }
4981 context->setUnpackAlignment(param);
4982 break;
4983 case GL_PACK_ALIGNMENT:
4984 if(param != 1 && param != 2 && param != 4 && param != 8)
4985 {
4986 return error(GL_INVALID_VALUE);
4987 }
4988 context->setPackAlignment(param);
4989 break;
4990 default:
4991 return error(GL_INVALID_ENUM);
4992 }
4993 }
4994}
4995
Nicolas Capensa9b49372015-01-30 00:33:26 -05004996void APIENTRY glPolygonOffset(GLfloat factor, GLfloat units)
Nicolas Capens264f1522015-01-09 17:21:17 -05004997{
4998 TRACE("(GLfloat factor = %f, GLfloat units = %f)", factor, units);
4999
Nicolas Capensf4486fd2015-01-22 11:10:37 -05005000 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05005001
5002 if(context)
5003 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05005004 if(context->getListIndex() != 0)
5005 {
5006 UNIMPLEMENTED();
5007 }
5008
Nicolas Capens264f1522015-01-09 17:21:17 -05005009 context->setPolygonOffsetParams(factor, units);
5010 }
5011}
5012
Nicolas Capensa9b49372015-01-30 00:33:26 -05005013void APIENTRY glReadnPixelsEXT(GLint x, GLint y, GLsizei width, GLsizei height,
Maxime Grégoire20942c02015-07-16 14:12:47 -04005014 GLenum format, GLenum type, GLsizei bufSize, GLvoid *data)
Nicolas Capens264f1522015-01-09 17:21:17 -05005015{
5016 TRACE("(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d, "
Maxime Grégoire20942c02015-07-16 14:12:47 -04005017 "GLenum format = 0x%X, GLenum type = 0x%X, GLsizei bufSize = 0x%d, GLvoid *data = %p)",
5018 x, y, width, height, format, type, bufSize, data);
Nicolas Capens264f1522015-01-09 17:21:17 -05005019
5020 if(width < 0 || height < 0 || bufSize < 0)
5021 {
5022 return error(GL_INVALID_VALUE);
5023 }
5024
5025 if(!validReadFormatType(format, type))
5026 {
5027 return error(GL_INVALID_OPERATION);
5028 }
5029
Nicolas Capensf4486fd2015-01-22 11:10:37 -05005030 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05005031
5032 if(context)
5033 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05005034 if(context->getListIndex() != 0)
5035 {
5036 UNIMPLEMENTED();
5037 }
5038
Nicolas Capens264f1522015-01-09 17:21:17 -05005039 context->readPixels(x, y, width, height, format, type, &bufSize, data);
5040 }
5041}
5042
Nicolas Capensa9b49372015-01-30 00:33:26 -05005043void APIENTRY glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels)
Nicolas Capens264f1522015-01-09 17:21:17 -05005044{
5045 TRACE("(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d, "
Maxime Grégoire20942c02015-07-16 14:12:47 -04005046 "GLenum format = 0x%X, GLenum type = 0x%X, GLvoid* pixels = %p)",
5047 x, y, width, height, format, type, pixels);
Nicolas Capens264f1522015-01-09 17:21:17 -05005048
5049 if(width < 0 || height < 0)
5050 {
5051 return error(GL_INVALID_VALUE);
5052 }
5053
5054 if(!validReadFormatType(format, type))
5055 {
5056 return error(GL_INVALID_OPERATION);
5057 }
5058
Nicolas Capensf4486fd2015-01-22 11:10:37 -05005059 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05005060
5061 if(context)
5062 {
5063 context->readPixels(x, y, width, height, format, type, NULL, pixels);
5064 }
5065}
5066
Nicolas Capensa9b49372015-01-30 00:33:26 -05005067void APIENTRY glReleaseShaderCompiler(void)
Nicolas Capens264f1522015-01-09 17:21:17 -05005068{
5069 TRACE("()");
5070
Nicolas Capensf4486fd2015-01-22 11:10:37 -05005071 gl::Shader::releaseCompiler();
Nicolas Capens264f1522015-01-09 17:21:17 -05005072}
5073
Nicolas Capensa9b49372015-01-30 00:33:26 -05005074void APIENTRY glRenderbufferStorageMultisampleANGLE(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)
Nicolas Capens264f1522015-01-09 17:21:17 -05005075{
5076 TRACE("(GLenum target = 0x%X, GLsizei samples = %d, GLenum internalformat = 0x%X, GLsizei width = %d, GLsizei height = %d)",
Maxime Grégoire20942c02015-07-16 14:12:47 -04005077 target, samples, internalformat, width, height);
Nicolas Capens264f1522015-01-09 17:21:17 -05005078
5079 switch(target)
5080 {
5081 case GL_RENDERBUFFER:
5082 break;
5083 default:
5084 return error(GL_INVALID_ENUM);
5085 }
5086
Nicolas Capensf4486fd2015-01-22 11:10:37 -05005087 if(!gl::IsColorRenderable(internalformat) && !gl::IsDepthRenderable(internalformat) && !gl::IsStencilRenderable(internalformat))
Nicolas Capens264f1522015-01-09 17:21:17 -05005088 {
5089 return error(GL_INVALID_ENUM);
5090 }
5091
5092 if(width < 0 || height < 0 || samples < 0)
5093 {
5094 return error(GL_INVALID_VALUE);
5095 }
5096
Nicolas Capensf4486fd2015-01-22 11:10:37 -05005097 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05005098
5099 if(context)
5100 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05005101 if(context->getListIndex() != 0)
5102 {
5103 UNIMPLEMENTED();
5104 }
5105
Maxime Grégoire20942c02015-07-16 14:12:47 -04005106 if(width > gl::IMPLEMENTATION_MAX_RENDERBUFFER_SIZE ||
5107 height > gl::IMPLEMENTATION_MAX_RENDERBUFFER_SIZE ||
5108 samples > gl::IMPLEMENTATION_MAX_SAMPLES)
Nicolas Capens264f1522015-01-09 17:21:17 -05005109 {
5110 return error(GL_INVALID_VALUE);
5111 }
5112
Nicolas Capens7cc75e12015-01-29 14:44:24 -05005113 GLuint handle = context->getRenderbufferName();
Nicolas Capens264f1522015-01-09 17:21:17 -05005114 if(handle == 0)
5115 {
5116 return error(GL_INVALID_OPERATION);
5117 }
5118
5119 switch(internalformat)
5120 {
5121 case GL_DEPTH_COMPONENT16:
Nicolas Capensa9b49372015-01-30 00:33:26 -05005122 case GL_DEPTH_COMPONENT24:
Nicolas Capensf4486fd2015-01-22 11:10:37 -05005123 context->setRenderbufferStorage(new gl::Depthbuffer(width, height, samples));
Nicolas Capens264f1522015-01-09 17:21:17 -05005124 break;
5125 case GL_RGBA4:
5126 case GL_RGB5_A1:
5127 case GL_RGB565:
Nicolas Capensa9b49372015-01-30 00:33:26 -05005128 case GL_RGB8_EXT:
5129 case GL_RGBA8_EXT:
Nicolas Capensf4486fd2015-01-22 11:10:37 -05005130 context->setRenderbufferStorage(new gl::Colorbuffer(width, height, internalformat, samples));
Nicolas Capens264f1522015-01-09 17:21:17 -05005131 break;
5132 case GL_STENCIL_INDEX8:
Nicolas Capensf4486fd2015-01-22 11:10:37 -05005133 context->setRenderbufferStorage(new gl::Stencilbuffer(width, height, samples));
Nicolas Capens264f1522015-01-09 17:21:17 -05005134 break;
Nicolas Capensa9b49372015-01-30 00:33:26 -05005135 case GL_DEPTH24_STENCIL8_EXT:
Nicolas Capensf4486fd2015-01-22 11:10:37 -05005136 context->setRenderbufferStorage(new gl::DepthStencilbuffer(width, height, samples));
Nicolas Capens264f1522015-01-09 17:21:17 -05005137 break;
5138 default:
5139 return error(GL_INVALID_ENUM);
5140 }
5141 }
5142}
5143
Nicolas Capensa9b49372015-01-30 00:33:26 -05005144void APIENTRY glRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
Nicolas Capens264f1522015-01-09 17:21:17 -05005145{
5146 glRenderbufferStorageMultisampleANGLE(target, 0, internalformat, width, height);
5147}
5148
Nicolas Capensa9b49372015-01-30 00:33:26 -05005149void APIENTRY glSampleCoverage(GLclampf value, GLboolean invert)
Nicolas Capens264f1522015-01-09 17:21:17 -05005150{
5151 TRACE("(GLclampf value = %f, GLboolean invert = %d)", value, invert);
5152
Nicolas Capensf4486fd2015-01-22 11:10:37 -05005153 gl::Context* context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05005154
5155 if(context)
5156 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05005157 if(context->getListIndex() != 0)
5158 {
5159 UNIMPLEMENTED();
5160 }
5161
Nicolas Capensf4486fd2015-01-22 11:10:37 -05005162 context->setSampleCoverageParams(gl::clamp01(value), invert == GL_TRUE);
Nicolas Capens264f1522015-01-09 17:21:17 -05005163 }
5164}
5165
Nicolas Capensa9b49372015-01-30 00:33:26 -05005166void APIENTRY glSetFenceNV(GLuint fence, GLenum condition)
Nicolas Capens264f1522015-01-09 17:21:17 -05005167{
5168 TRACE("(GLuint fence = %d, GLenum condition = 0x%X)", fence, condition);
5169
5170 if(condition != GL_ALL_COMPLETED_NV)
5171 {
5172 return error(GL_INVALID_ENUM);
5173 }
5174
Nicolas Capensf4486fd2015-01-22 11:10:37 -05005175 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05005176
5177 if(context)
5178 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05005179 if(context->getListIndex() != 0)
5180 {
5181 UNIMPLEMENTED();
5182 }
5183
Nicolas Capensf4486fd2015-01-22 11:10:37 -05005184 gl::Fence *fenceObject = context->getFence(fence);
Nicolas Capens264f1522015-01-09 17:21:17 -05005185
5186 if(fenceObject == NULL)
5187 {
5188 return error(GL_INVALID_OPERATION);
5189 }
5190
5191 fenceObject->setFence(condition);
5192 }
5193}
5194
Nicolas Capensa9b49372015-01-30 00:33:26 -05005195void APIENTRY glScissor(GLint x, GLint y, GLsizei width, GLsizei height)
Nicolas Capens264f1522015-01-09 17:21:17 -05005196{
5197 TRACE("(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d)", x, y, width, height);
5198
5199 if(width < 0 || height < 0)
5200 {
5201 return error(GL_INVALID_VALUE);
5202 }
5203
Nicolas Capensf4486fd2015-01-22 11:10:37 -05005204 gl::Context* context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05005205
5206 if(context)
5207 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05005208 if(context->getListIndex() != 0)
5209 {
5210 UNIMPLEMENTED();
5211 }
5212
Nicolas Capens264f1522015-01-09 17:21:17 -05005213 context->setScissorParams(x, y, width, height);
5214 }
5215}
5216
Nicolas Capensa9b49372015-01-30 00:33:26 -05005217void APIENTRY glShaderBinary(GLsizei n, const GLuint* shaders, GLenum binaryformat, const GLvoid* binary, GLsizei length)
Nicolas Capens264f1522015-01-09 17:21:17 -05005218{
Nicolas Capens4be33702015-04-28 15:13:30 -07005219 TRACE("(GLsizei n = %d, const GLuint* shaders = %p, GLenum binaryformat = 0x%X, "
Maxime Grégoire20942c02015-07-16 14:12:47 -04005220 "const GLvoid* binary = %p, GLsizei length = %d)",
5221 n, shaders, binaryformat, binary, length);
Nicolas Capens264f1522015-01-09 17:21:17 -05005222
5223 // No binary shader formats are supported.
5224 return error(GL_INVALID_ENUM);
5225}
5226
Nicolas Capensa9b49372015-01-30 00:33:26 -05005227void APIENTRY glShaderSource(GLuint shader, GLsizei count, const GLchar *const *string, const GLint *length)
Nicolas Capens264f1522015-01-09 17:21:17 -05005228{
Nicolas Capens4be33702015-04-28 15:13:30 -07005229 TRACE("(GLuint shader = %d, GLsizei count = %d, const GLchar** string = %p, const GLint* length = %p)",
Maxime Grégoire20942c02015-07-16 14:12:47 -04005230 shader, count, string, length);
Nicolas Capens264f1522015-01-09 17:21:17 -05005231
5232 if(count < 0)
5233 {
5234 return error(GL_INVALID_VALUE);
5235 }
5236
Nicolas Capensf4486fd2015-01-22 11:10:37 -05005237 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05005238
5239 if(context)
5240 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05005241 if(context->getListIndex() != 0)
5242 {
5243 UNIMPLEMENTED();
5244 }
5245
Nicolas Capensf4486fd2015-01-22 11:10:37 -05005246 gl::Shader *shaderObject = context->getShader(shader);
Nicolas Capens264f1522015-01-09 17:21:17 -05005247
5248 if(!shaderObject)
5249 {
5250 if(context->getProgram(shader))
5251 {
5252 return error(GL_INVALID_OPERATION);
5253 }
5254 else
5255 {
5256 return error(GL_INVALID_VALUE);
5257 }
5258 }
5259
5260 shaderObject->setSource(count, string, length);
5261 }
5262}
5263
Nicolas Capensa9b49372015-01-30 00:33:26 -05005264void APIENTRY glStencilFunc(GLenum func, GLint ref, GLuint mask)
Nicolas Capens264f1522015-01-09 17:21:17 -05005265{
5266 glStencilFuncSeparate(GL_FRONT_AND_BACK, func, ref, mask);
5267}
5268
Nicolas Capensa9b49372015-01-30 00:33:26 -05005269void APIENTRY glStencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask)
Nicolas Capens264f1522015-01-09 17:21:17 -05005270{
5271 TRACE("(GLenum face = 0x%X, GLenum func = 0x%X, GLint ref = %d, GLuint mask = %d)", face, func, ref, mask);
5272
5273 switch(face)
5274 {
5275 case GL_FRONT:
5276 case GL_BACK:
5277 case GL_FRONT_AND_BACK:
5278 break;
5279 default:
5280 return error(GL_INVALID_ENUM);
5281 }
5282
5283 switch(func)
5284 {
5285 case GL_NEVER:
5286 case GL_ALWAYS:
5287 case GL_LESS:
5288 case GL_LEQUAL:
5289 case GL_EQUAL:
5290 case GL_GEQUAL:
5291 case GL_GREATER:
5292 case GL_NOTEQUAL:
5293 break;
5294 default:
5295 return error(GL_INVALID_ENUM);
5296 }
5297
Nicolas Capensf4486fd2015-01-22 11:10:37 -05005298 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05005299
5300 if(context)
5301 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05005302 if(context->getListIndex() != 0)
5303 {
5304 UNIMPLEMENTED();
5305 }
5306
Nicolas Capens264f1522015-01-09 17:21:17 -05005307 if(face == GL_FRONT || face == GL_FRONT_AND_BACK)
5308 {
5309 context->setStencilParams(func, ref, mask);
5310 }
5311
5312 if(face == GL_BACK || face == GL_FRONT_AND_BACK)
5313 {
5314 context->setStencilBackParams(func, ref, mask);
5315 }
5316 }
5317}
5318
Nicolas Capensa9b49372015-01-30 00:33:26 -05005319void APIENTRY glStencilMask(GLuint mask)
Nicolas Capens264f1522015-01-09 17:21:17 -05005320{
5321 glStencilMaskSeparate(GL_FRONT_AND_BACK, mask);
5322}
5323
Nicolas Capensa9b49372015-01-30 00:33:26 -05005324void APIENTRY glStencilMaskSeparate(GLenum face, GLuint mask)
Nicolas Capens264f1522015-01-09 17:21:17 -05005325{
5326 TRACE("(GLenum face = 0x%X, GLuint mask = %d)", face, mask);
5327
5328 switch(face)
5329 {
5330 case GL_FRONT:
5331 case GL_BACK:
5332 case GL_FRONT_AND_BACK:
5333 break;
5334 default:
5335 return error(GL_INVALID_ENUM);
5336 }
5337
Nicolas Capensf4486fd2015-01-22 11:10:37 -05005338 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05005339
5340 if(context)
5341 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05005342 if(context->getListIndex() != 0)
5343 {
5344 UNIMPLEMENTED();
5345 }
5346
Nicolas Capens264f1522015-01-09 17:21:17 -05005347 if(face == GL_FRONT || face == GL_FRONT_AND_BACK)
5348 {
5349 context->setStencilWritemask(mask);
5350 }
5351
5352 if(face == GL_BACK || face == GL_FRONT_AND_BACK)
5353 {
5354 context->setStencilBackWritemask(mask);
5355 }
5356 }
5357}
5358
Nicolas Capensa9b49372015-01-30 00:33:26 -05005359void APIENTRY glStencilOp(GLenum fail, GLenum zfail, GLenum zpass)
Nicolas Capens264f1522015-01-09 17:21:17 -05005360{
5361 glStencilOpSeparate(GL_FRONT_AND_BACK, fail, zfail, zpass);
5362}
5363
Nicolas Capensa9b49372015-01-30 00:33:26 -05005364void APIENTRY glStencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass)
Nicolas Capens264f1522015-01-09 17:21:17 -05005365{
5366 TRACE("(GLenum face = 0x%X, GLenum fail = 0x%X, GLenum zfail = 0x%X, GLenum zpas = 0x%Xs)",
Maxime Grégoire20942c02015-07-16 14:12:47 -04005367 face, fail, zfail, zpass);
Nicolas Capens264f1522015-01-09 17:21:17 -05005368
5369 switch(face)
5370 {
5371 case GL_FRONT:
5372 case GL_BACK:
5373 case GL_FRONT_AND_BACK:
5374 break;
5375 default:
5376 return error(GL_INVALID_ENUM);
5377 }
5378
5379 switch(fail)
5380 {
5381 case GL_ZERO:
5382 case GL_KEEP:
5383 case GL_REPLACE:
5384 case GL_INCR:
5385 case GL_DECR:
5386 case GL_INVERT:
5387 case GL_INCR_WRAP:
5388 case GL_DECR_WRAP:
5389 break;
5390 default:
5391 return error(GL_INVALID_ENUM);
5392 }
5393
5394 switch(zfail)
5395 {
5396 case GL_ZERO:
5397 case GL_KEEP:
5398 case GL_REPLACE:
5399 case GL_INCR:
5400 case GL_DECR:
5401 case GL_INVERT:
5402 case GL_INCR_WRAP:
5403 case GL_DECR_WRAP:
5404 break;
5405 default:
5406 return error(GL_INVALID_ENUM);
5407 }
5408
5409 switch(zpass)
5410 {
5411 case GL_ZERO:
5412 case GL_KEEP:
5413 case GL_REPLACE:
5414 case GL_INCR:
5415 case GL_DECR:
5416 case GL_INVERT:
5417 case GL_INCR_WRAP:
5418 case GL_DECR_WRAP:
5419 break;
5420 default:
5421 return error(GL_INVALID_ENUM);
5422 }
5423
Nicolas Capensf4486fd2015-01-22 11:10:37 -05005424 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05005425
5426 if(context)
5427 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05005428 if(context->getListIndex() != 0)
5429 {
5430 UNIMPLEMENTED();
5431 }
5432
Nicolas Capens264f1522015-01-09 17:21:17 -05005433 if(face == GL_FRONT || face == GL_FRONT_AND_BACK)
5434 {
5435 context->setStencilOperations(fail, zfail, zpass);
5436 }
5437
5438 if(face == GL_BACK || face == GL_FRONT_AND_BACK)
5439 {
5440 context->setStencilBackOperations(fail, zfail, zpass);
5441 }
5442 }
5443}
5444
Nicolas Capensa9b49372015-01-30 00:33:26 -05005445GLboolean APIENTRY glTestFenceNV(GLuint fence)
Nicolas Capens264f1522015-01-09 17:21:17 -05005446{
5447 TRACE("(GLuint fence = %d)", fence);
5448
Nicolas Capensf4486fd2015-01-22 11:10:37 -05005449 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05005450
5451 if(context)
5452 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05005453 if(context->getListIndex() != 0)
5454 {
5455 UNIMPLEMENTED();
5456 }
5457
Nicolas Capensf4486fd2015-01-22 11:10:37 -05005458 gl::Fence *fenceObject = context->getFence(fence);
Nicolas Capens264f1522015-01-09 17:21:17 -05005459
5460 if(fenceObject == NULL)
5461 {
5462 return error(GL_INVALID_OPERATION, GL_TRUE);
5463 }
5464
5465 return fenceObject->testFence();
5466 }
5467
5468 return GL_TRUE;
5469}
5470
Nicolas Capensa9b49372015-01-30 00:33:26 -05005471void APIENTRY glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
Maxime Grégoire20942c02015-07-16 14:12:47 -04005472 GLint border, GLenum format, GLenum type, const GLvoid* pixels)
Nicolas Capens264f1522015-01-09 17:21:17 -05005473{
5474 TRACE("(GLenum target = 0x%X, GLint level = %d, GLint internalformat = %d, GLsizei width = %d, GLsizei height = %d, "
Maxime Grégoire20942c02015-07-16 14:12:47 -04005475 "GLint border = %d, GLenum format = 0x%X, GLenum type = 0x%X, const GLvoid* pixels = %p)",
5476 target, level, internalformat, width, height, border, format, type, pixels);
Nicolas Capens264f1522015-01-09 17:21:17 -05005477
5478 if(!validImageSize(level, width, height))
5479 {
5480 return error(GL_INVALID_VALUE);
5481 }
5482
5483 if(internalformat != format)
5484 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05005485 //TRACE("UNIMPLEMENTED!!");
5486 //return error(GL_INVALID_OPERATION);
Nicolas Capens264f1522015-01-09 17:21:17 -05005487 }
5488
5489 switch(format)
5490 {
5491 case GL_ALPHA:
5492 case GL_LUMINANCE:
5493 case GL_LUMINANCE_ALPHA:
5494 switch(type)
5495 {
5496 case GL_UNSIGNED_BYTE:
5497 case GL_FLOAT:
Nicolas Capensa9b49372015-01-30 00:33:26 -05005498 case GL_HALF_FLOAT:
Nicolas Capens264f1522015-01-09 17:21:17 -05005499 break;
5500 default:
5501 return error(GL_INVALID_ENUM);
5502 }
5503 break;
5504 case GL_RGB:
5505 switch(type)
5506 {
5507 case GL_UNSIGNED_BYTE:
5508 case GL_UNSIGNED_SHORT_5_6_5:
5509 case GL_FLOAT:
Nicolas Capensa9b49372015-01-30 00:33:26 -05005510 case GL_HALF_FLOAT:
Nicolas Capens264f1522015-01-09 17:21:17 -05005511 break;
5512 default:
5513 return error(GL_INVALID_ENUM);
5514 }
5515 break;
5516 case GL_RGBA:
5517 switch(type)
5518 {
5519 case GL_UNSIGNED_BYTE:
5520 case GL_UNSIGNED_SHORT_4_4_4_4:
5521 case GL_UNSIGNED_SHORT_5_5_5_1:
5522 case GL_FLOAT:
Nicolas Capensa9b49372015-01-30 00:33:26 -05005523 case GL_HALF_FLOAT:
Nicolas Capens264f1522015-01-09 17:21:17 -05005524 break;
5525 default:
5526 return error(GL_INVALID_ENUM);
5527 }
5528 break;
5529 case GL_BGRA_EXT:
5530 switch(type)
5531 {
5532 case GL_UNSIGNED_BYTE:
Nicolas Capensa9b49372015-01-30 00:33:26 -05005533 case GL_UNSIGNED_SHORT_5_6_5:
5534 case GL_UNSIGNED_INT_8_8_8_8_REV:
Nicolas Capens264f1522015-01-09 17:21:17 -05005535 break;
5536 default:
5537 return error(GL_INVALID_ENUM);
5538 }
5539 break;
Nicolas Capensa9b49372015-01-30 00:33:26 -05005540 case GL_COMPRESSED_RGB_S3TC_DXT1_EXT: // error cases for compressed textures are handled below
Nicolas Capens264f1522015-01-09 17:21:17 -05005541 case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
Nicolas Capensa9b49372015-01-30 00:33:26 -05005542 case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
5543 case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
5544 break;
Nicolas Capens264f1522015-01-09 17:21:17 -05005545 case GL_DEPTH_COMPONENT:
5546 switch(type)
5547 {
5548 case GL_UNSIGNED_SHORT:
5549 case GL_UNSIGNED_INT:
5550 break;
5551 default:
5552 return error(GL_INVALID_ENUM);
5553 }
5554 break;
Nicolas Capensa9b49372015-01-30 00:33:26 -05005555 case GL_DEPTH_STENCIL_EXT:
Nicolas Capens264f1522015-01-09 17:21:17 -05005556 switch(type)
5557 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05005558 case GL_UNSIGNED_INT_24_8_EXT:
Nicolas Capens264f1522015-01-09 17:21:17 -05005559 break;
5560 default:
5561 return error(GL_INVALID_ENUM);
5562 }
5563 break;
5564 default:
5565 return error(GL_INVALID_VALUE);
5566 }
5567
5568 if(border != 0)
5569 {
5570 return error(GL_INVALID_VALUE);
5571 }
5572
Nicolas Capensa9b49372015-01-30 00:33:26 -05005573 switch(target)
5574 {
Maxime Grégoire5e582162015-07-16 12:52:57 -04005575 case GL_TEXTURE_1D:
Nicolas Capensa9b49372015-01-30 00:33:26 -05005576 case GL_TEXTURE_2D:
Maxime Grégoire20942c02015-07-16 14:12:47 -04005577 case GL_TEXTURE_RECTANGLE:
Nicolas Capensa9b49372015-01-30 00:33:26 -05005578 if(width > (gl::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level) ||
Maxime Grégoire20942c02015-07-16 14:12:47 -04005579 height > (gl::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level))
Nicolas Capensa9b49372015-01-30 00:33:26 -05005580 {
5581 return error(GL_INVALID_VALUE);
5582 }
5583 break;
5584 case GL_TEXTURE_CUBE_MAP_POSITIVE_X:
5585 case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:
5586 case GL_TEXTURE_CUBE_MAP_POSITIVE_Y:
5587 case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y:
5588 case GL_TEXTURE_CUBE_MAP_POSITIVE_Z:
5589 case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:
5590 if(width != height)
5591 {
5592 return error(GL_INVALID_VALUE);
5593 }
5594
5595 if(width > (gl::IMPLEMENTATION_MAX_CUBE_MAP_TEXTURE_SIZE >> level) ||
Maxime Grégoire20942c02015-07-16 14:12:47 -04005596 height > (gl::IMPLEMENTATION_MAX_CUBE_MAP_TEXTURE_SIZE >> level))
Nicolas Capensa9b49372015-01-30 00:33:26 -05005597 {
5598 return error(GL_INVALID_VALUE);
5599 }
5600 break;
5601 case GL_PROXY_TEXTURE_2D:
5602 pixels = 0;
5603
5604 if(width > (gl::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level) ||
Maxime Grégoire20942c02015-07-16 14:12:47 -04005605 height > (gl::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level))
Nicolas Capensa9b49372015-01-30 00:33:26 -05005606 {
5607 //UNIMPLEMENTED();
5608 width = 0;
5609 height = 0;
5610 internalformat = GL_NONE;
5611 format = GL_NONE;
5612 type = GL_NONE;
5613
5614 //return;// error(GL_INVALID_VALUE);
5615 }
5616 break;
5617 default:
5618 return error(GL_INVALID_ENUM);
5619 }
5620
5621 if(format == GL_COMPRESSED_RGB_S3TC_DXT1_EXT ||
Maxime Grégoire20942c02015-07-16 14:12:47 -04005622 format == GL_COMPRESSED_RGBA_S3TC_DXT1_EXT ||
5623 format == GL_COMPRESSED_RGBA_S3TC_DXT3_EXT ||
5624 format == GL_COMPRESSED_RGBA_S3TC_DXT5_EXT)
Nicolas Capensa9b49372015-01-30 00:33:26 -05005625 {
5626 if(S3TC_SUPPORT)
5627 {
5628 return error(GL_INVALID_OPERATION);
5629 }
5630 else
5631 {
5632 return error(GL_INVALID_ENUM);
5633 }
5634 }
5635
Nicolas Capensf4486fd2015-01-22 11:10:37 -05005636 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05005637
5638 if(context)
5639 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05005640 if(context->getListIndex() != 0)
Nicolas Capens264f1522015-01-09 17:21:17 -05005641 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05005642 UNIMPLEMENTED();
Nicolas Capens264f1522015-01-09 17:21:17 -05005643 }
5644
Maxime Grégoire5e582162015-07-16 12:52:57 -04005645 if(target == GL_TEXTURE_1D)
5646 {
5647 gl::Texture1D *texture = context->getTexture1D();
5648
5649 if(!texture)
5650 {
5651 return error(GL_INVALID_OPERATION);
5652 }
5653
5654 texture->setImage(level, width, height, format, type, context->getUnpackAlignment(), pixels);
5655 }
Maxime Grégoire20942c02015-07-16 14:12:47 -04005656 else if(target == GL_TEXTURE_2D || target == GL_PROXY_TEXTURE_2D || target == GL_TEXTURE_RECTANGLE)
Nicolas Capens264f1522015-01-09 17:21:17 -05005657 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05005658 gl::Texture2D *texture = context->getTexture2D(target);
Nicolas Capens264f1522015-01-09 17:21:17 -05005659
5660 if(!texture)
5661 {
5662 return error(GL_INVALID_OPERATION);
5663 }
5664
5665 texture->setImage(level, width, height, format, type, context->getUnpackAlignment(), pixels);
5666 }
5667 else
5668 {
Nicolas Capensf4486fd2015-01-22 11:10:37 -05005669 gl::TextureCubeMap *texture = context->getTextureCubeMap();
Nicolas Capens264f1522015-01-09 17:21:17 -05005670
5671 if(!texture)
5672 {
5673 return error(GL_INVALID_OPERATION);
5674 }
5675
5676 texture->setImage(target, level, width, height, format, type, context->getUnpackAlignment(), pixels);
5677 }
5678 }
5679}
5680
Nicolas Capensa9b49372015-01-30 00:33:26 -05005681void APIENTRY glTexParameterf(GLenum target, GLenum pname, GLfloat param)
Nicolas Capens264f1522015-01-09 17:21:17 -05005682{
5683 TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLfloat param = %f)", target, pname, param);
5684
Nicolas Capensf4486fd2015-01-22 11:10:37 -05005685 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05005686
5687 if(context)
5688 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05005689 if(context->getListIndex() != 0)
5690 {
5691 UNIMPLEMENTED();
5692 }
5693
Nicolas Capensf4486fd2015-01-22 11:10:37 -05005694 gl::Texture *texture;
Nicolas Capens264f1522015-01-09 17:21:17 -05005695
5696 switch(target)
5697 {
5698 case GL_TEXTURE_2D:
Nicolas Capensa9b49372015-01-30 00:33:26 -05005699 texture = context->getTexture2D(target);
Nicolas Capens264f1522015-01-09 17:21:17 -05005700 break;
5701 case GL_TEXTURE_CUBE_MAP:
5702 texture = context->getTextureCubeMap();
5703 break;
Nicolas Capens264f1522015-01-09 17:21:17 -05005704 default:
5705 return error(GL_INVALID_ENUM);
5706 }
5707
5708 switch(pname)
5709 {
5710 case GL_TEXTURE_WRAP_S:
5711 if(!texture->setWrapS((GLenum)param))
5712 {
5713 return error(GL_INVALID_ENUM);
5714 }
5715 break;
5716 case GL_TEXTURE_WRAP_T:
5717 if(!texture->setWrapT((GLenum)param))
5718 {
5719 return error(GL_INVALID_ENUM);
5720 }
5721 break;
5722 case GL_TEXTURE_MIN_FILTER:
5723 if(!texture->setMinFilter((GLenum)param))
5724 {
5725 return error(GL_INVALID_ENUM);
5726 }
5727 break;
5728 case GL_TEXTURE_MAG_FILTER:
5729 if(!texture->setMagFilter((GLenum)param))
5730 {
5731 return error(GL_INVALID_ENUM);
5732 }
5733 break;
5734 case GL_TEXTURE_MAX_ANISOTROPY_EXT:
5735 if(!texture->setMaxAnisotropy(param))
5736 {
5737 return error(GL_INVALID_VALUE);
5738 }
5739 break;
Nicolas Capensa9b49372015-01-30 00:33:26 -05005740 case GL_TEXTURE_MIN_LOD:
5741 //TRACE("() UNIMPLEMENTED!!"); // FIXME
5742 //UNIMPLEMENTED();
5743 break;
5744 case GL_TEXTURE_MAX_LOD:
5745 //TRACE("() UNIMPLEMENTED!!"); // FIXME
5746 //UNIMPLEMENTED();
5747 break;
5748 case GL_TEXTURE_LOD_BIAS:
5749 if(param != 0.0f)
5750 {
5751 UNIMPLEMENTED();
5752 }
5753 break;
Nicolas Capens264f1522015-01-09 17:21:17 -05005754 default:
5755 return error(GL_INVALID_ENUM);
5756 }
5757 }
5758}
5759
Nicolas Capensa9b49372015-01-30 00:33:26 -05005760void APIENTRY glTexParameterfv(GLenum target, GLenum pname, const GLfloat* params)
Nicolas Capens264f1522015-01-09 17:21:17 -05005761{
5762 glTexParameterf(target, pname, *params);
5763}
5764
Nicolas Capensa9b49372015-01-30 00:33:26 -05005765void APIENTRY glTexParameteri(GLenum target, GLenum pname, GLint param)
Nicolas Capens264f1522015-01-09 17:21:17 -05005766{
5767 TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint param = %d)", target, pname, param);
5768
Nicolas Capensf4486fd2015-01-22 11:10:37 -05005769 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05005770
5771 if(context)
5772 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05005773 if(context->getListIndex() != 0)
5774 {
5775 UNIMPLEMENTED();
5776 }
5777
Nicolas Capensf4486fd2015-01-22 11:10:37 -05005778 gl::Texture *texture;
Nicolas Capens264f1522015-01-09 17:21:17 -05005779
5780 switch(target)
5781 {
Maxime Grégoire5e582162015-07-16 12:52:57 -04005782 case GL_TEXTURE_1D:
5783 texture = context->getTexture1D();
5784 break;
Nicolas Capens264f1522015-01-09 17:21:17 -05005785 case GL_TEXTURE_2D:
Nicolas Capensa9b49372015-01-30 00:33:26 -05005786 texture = context->getTexture2D(target);
Nicolas Capens264f1522015-01-09 17:21:17 -05005787 break;
5788 case GL_TEXTURE_CUBE_MAP:
5789 texture = context->getTextureCubeMap();
5790 break;
Nicolas Capens264f1522015-01-09 17:21:17 -05005791 default:
5792 return error(GL_INVALID_ENUM);
5793 }
5794
5795 switch(pname)
5796 {
5797 case GL_TEXTURE_WRAP_S:
5798 if(!texture->setWrapS((GLenum)param))
5799 {
5800 return error(GL_INVALID_ENUM);
5801 }
5802 break;
5803 case GL_TEXTURE_WRAP_T:
5804 if(!texture->setWrapT((GLenum)param))
5805 {
5806 return error(GL_INVALID_ENUM);
5807 }
5808 break;
5809 case GL_TEXTURE_MIN_FILTER:
5810 if(!texture->setMinFilter((GLenum)param))
5811 {
5812 return error(GL_INVALID_ENUM);
5813 }
5814 break;
5815 case GL_TEXTURE_MAG_FILTER:
5816 if(!texture->setMagFilter((GLenum)param))
5817 {
5818 return error(GL_INVALID_ENUM);
5819 }
5820 break;
5821 case GL_TEXTURE_MAX_ANISOTROPY_EXT:
5822 if(!texture->setMaxAnisotropy((GLfloat)param))
5823 {
5824 return error(GL_INVALID_VALUE);
5825 }
5826 break;
Nicolas Capensa9b49372015-01-30 00:33:26 -05005827 case GL_TEXTURE_MAX_LEVEL:
5828 if(!texture->setMaxLevel(param))
5829 {
5830 return error(GL_INVALID_ENUM);
5831 }
5832 break;
Nicolas Capens264f1522015-01-09 17:21:17 -05005833 default:
5834 return error(GL_INVALID_ENUM);
5835 }
5836 }
5837}
5838
Nicolas Capensa9b49372015-01-30 00:33:26 -05005839void APIENTRY glTexParameteriv(GLenum target, GLenum pname, const GLint* params)
Nicolas Capens264f1522015-01-09 17:21:17 -05005840{
5841 glTexParameteri(target, pname, *params);
5842}
5843
Nicolas Capensa9b49372015-01-30 00:33:26 -05005844void APIENTRY glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
Maxime Grégoire20942c02015-07-16 14:12:47 -04005845 GLenum format, GLenum type, const GLvoid* pixels)
Nicolas Capens264f1522015-01-09 17:21:17 -05005846{
5847 TRACE("(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, "
Maxime Grégoire20942c02015-07-16 14:12:47 -04005848 "GLsizei width = %d, GLsizei height = %d, GLenum format = 0x%X, GLenum type = 0x%X, "
5849 "const GLvoid* pixels = %p)",
5850 target, level, xoffset, yoffset, width, height, format, type, pixels);
Nicolas Capens264f1522015-01-09 17:21:17 -05005851
Nicolas Capensf4486fd2015-01-22 11:10:37 -05005852 if(!gl::IsTextureTarget(target))
Nicolas Capens264f1522015-01-09 17:21:17 -05005853 {
5854 return error(GL_INVALID_ENUM);
5855 }
5856
5857 if(level < 0 || xoffset < 0 || yoffset < 0 || width < 0 || height < 0)
5858 {
5859 return error(GL_INVALID_VALUE);
5860 }
5861
5862 if(std::numeric_limits<GLsizei>::max() - xoffset < width || std::numeric_limits<GLsizei>::max() - yoffset < height)
5863 {
5864 return error(GL_INVALID_VALUE);
5865 }
5866
Nicolas Capensf4486fd2015-01-22 11:10:37 -05005867 if(!gl::CheckTextureFormatType(format, type))
Nicolas Capens264f1522015-01-09 17:21:17 -05005868 {
5869 return error(GL_INVALID_ENUM);
5870 }
5871
5872 if(width == 0 || height == 0 || pixels == NULL)
5873 {
5874 return;
5875 }
5876
Nicolas Capensf4486fd2015-01-22 11:10:37 -05005877 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05005878
5879 if(context)
5880 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05005881 if(context->getListIndex() != 0)
5882 {
5883 UNIMPLEMENTED();
5884 }
5885
Nicolas Capensf4486fd2015-01-22 11:10:37 -05005886 if(level > gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS)
Nicolas Capens264f1522015-01-09 17:21:17 -05005887 {
5888 return error(GL_INVALID_VALUE);
5889 }
Maxime Grégoire5e582162015-07-16 12:52:57 -04005890 if(target == GL_TEXTURE_1D)
5891 {
5892 gl::Texture1D *texture = context->getTexture1D();
5893
5894 if(validateSubImageParams(false, width, height, xoffset, yoffset, target, level, format, texture))
5895 {
5896 texture->subImage(level, xoffset, yoffset, width, height, format, type, context->getUnpackAlignment(), pixels);
5897 }
5898 }
Maxime Grégoire20942c02015-07-16 14:12:47 -04005899 else if(target == GL_TEXTURE_2D || target == GL_TEXTURE_RECTANGLE)
Nicolas Capens264f1522015-01-09 17:21:17 -05005900 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05005901 gl::Texture2D *texture = context->getTexture2D(target);
Nicolas Capens264f1522015-01-09 17:21:17 -05005902
5903 if(validateSubImageParams(false, width, height, xoffset, yoffset, target, level, format, texture))
5904 {
5905 texture->subImage(level, xoffset, yoffset, width, height, format, type, context->getUnpackAlignment(), pixels);
5906 }
5907 }
Nicolas Capensf4486fd2015-01-22 11:10:37 -05005908 else if(gl::IsCubemapTextureTarget(target))
Nicolas Capens264f1522015-01-09 17:21:17 -05005909 {
Nicolas Capensf4486fd2015-01-22 11:10:37 -05005910 gl::TextureCubeMap *texture = context->getTextureCubeMap();
Nicolas Capens264f1522015-01-09 17:21:17 -05005911
5912 if(validateSubImageParams(false, width, height, xoffset, yoffset, target, level, format, texture))
5913 {
5914 texture->subImage(target, level, xoffset, yoffset, width, height, format, type, context->getUnpackAlignment(), pixels);
5915 }
5916 }
5917 else
5918 {
5919 UNREACHABLE();
5920 }
5921 }
5922}
5923
Nicolas Capensa9b49372015-01-30 00:33:26 -05005924void APIENTRY glUniform1f(GLint location, GLfloat x)
Nicolas Capens264f1522015-01-09 17:21:17 -05005925{
5926 glUniform1fv(location, 1, &x);
5927}
5928
Nicolas Capensa9b49372015-01-30 00:33:26 -05005929void APIENTRY glUniform1fv(GLint location, GLsizei count, const GLfloat* v)
Nicolas Capens264f1522015-01-09 17:21:17 -05005930{
Nicolas Capens4be33702015-04-28 15:13:30 -07005931 TRACE("(GLint location = %d, GLsizei count = %d, const GLfloat* v = %p)", location, count, v);
Nicolas Capens264f1522015-01-09 17:21:17 -05005932
5933 if(count < 0)
5934 {
5935 return error(GL_INVALID_VALUE);
5936 }
5937
5938 if(location == -1)
5939 {
5940 return;
5941 }
5942
Nicolas Capensf4486fd2015-01-22 11:10:37 -05005943 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05005944
5945 if(context)
5946 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05005947 if(context->getListIndex() != 0)
5948 {
5949 UNIMPLEMENTED();
5950 }
5951
Nicolas Capensf4486fd2015-01-22 11:10:37 -05005952 gl::Program *program = context->getCurrentProgram();
Nicolas Capens264f1522015-01-09 17:21:17 -05005953
5954 if(!program)
5955 {
5956 return error(GL_INVALID_OPERATION);
5957 }
5958
5959 if(!program->setUniform1fv(location, count, v))
5960 {
5961 return error(GL_INVALID_OPERATION);
5962 }
5963 }
5964}
5965
Nicolas Capensa9b49372015-01-30 00:33:26 -05005966void APIENTRY glUniform1i(GLint location, GLint x)
Nicolas Capens264f1522015-01-09 17:21:17 -05005967{
5968 glUniform1iv(location, 1, &x);
5969}
5970
Nicolas Capensa9b49372015-01-30 00:33:26 -05005971void APIENTRY glUniform1iv(GLint location, GLsizei count, const GLint* v)
Nicolas Capens264f1522015-01-09 17:21:17 -05005972{
Nicolas Capens4be33702015-04-28 15:13:30 -07005973 TRACE("(GLint location = %d, GLsizei count = %d, const GLint* v = %p)", location, count, v);
Nicolas Capens264f1522015-01-09 17:21:17 -05005974
5975 if(count < 0)
5976 {
5977 return error(GL_INVALID_VALUE);
5978 }
5979
5980 if(location == -1)
5981 {
5982 return;
5983 }
5984
Nicolas Capensf4486fd2015-01-22 11:10:37 -05005985 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05005986
5987 if(context)
5988 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05005989 if(context->getListIndex() != 0)
5990 {
5991 UNIMPLEMENTED();
5992 }
5993
Nicolas Capensf4486fd2015-01-22 11:10:37 -05005994 gl::Program *program = context->getCurrentProgram();
Nicolas Capens264f1522015-01-09 17:21:17 -05005995
5996 if(!program)
5997 {
5998 return error(GL_INVALID_OPERATION);
5999 }
6000
6001 if(!program->setUniform1iv(location, count, v))
6002 {
6003 return error(GL_INVALID_OPERATION);
6004 }
6005 }
6006}
6007
Nicolas Capensa9b49372015-01-30 00:33:26 -05006008void APIENTRY glUniform2f(GLint location, GLfloat x, GLfloat y)
Nicolas Capens264f1522015-01-09 17:21:17 -05006009{
Maxime Grégoire20942c02015-07-16 14:12:47 -04006010 GLfloat xy[2] = { x, y };
Nicolas Capens264f1522015-01-09 17:21:17 -05006011
6012 glUniform2fv(location, 1, (GLfloat*)&xy);
6013}
6014
Nicolas Capensa9b49372015-01-30 00:33:26 -05006015void APIENTRY glUniform2fv(GLint location, GLsizei count, const GLfloat* v)
Nicolas Capens264f1522015-01-09 17:21:17 -05006016{
Nicolas Capens4be33702015-04-28 15:13:30 -07006017 TRACE("(GLint location = %d, GLsizei count = %d, const GLfloat* v = %p)", location, count, v);
Nicolas Capens264f1522015-01-09 17:21:17 -05006018
6019 if(count < 0)
6020 {
6021 return error(GL_INVALID_VALUE);
6022 }
6023
6024 if(location == -1)
6025 {
6026 return;
6027 }
6028
Nicolas Capensf4486fd2015-01-22 11:10:37 -05006029 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05006030
6031 if(context)
6032 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05006033 if(context->getListIndex() != 0)
6034 {
6035 UNIMPLEMENTED();
6036 }
6037
Nicolas Capensf4486fd2015-01-22 11:10:37 -05006038 gl::Program *program = context->getCurrentProgram();
Nicolas Capens264f1522015-01-09 17:21:17 -05006039
6040 if(!program)
6041 {
6042 return error(GL_INVALID_OPERATION);
6043 }
6044
6045 if(!program->setUniform2fv(location, count, v))
6046 {
6047 return error(GL_INVALID_OPERATION);
6048 }
6049 }
6050}
6051
Nicolas Capensa9b49372015-01-30 00:33:26 -05006052void APIENTRY glUniform2i(GLint location, GLint x, GLint y)
Nicolas Capens264f1522015-01-09 17:21:17 -05006053{
Maxime Grégoire20942c02015-07-16 14:12:47 -04006054 GLint xy[4] = { x, y };
Nicolas Capens264f1522015-01-09 17:21:17 -05006055
6056 glUniform2iv(location, 1, (GLint*)&xy);
6057}
6058
Nicolas Capensa9b49372015-01-30 00:33:26 -05006059void APIENTRY glUniform2iv(GLint location, GLsizei count, const GLint* v)
Nicolas Capens264f1522015-01-09 17:21:17 -05006060{
Nicolas Capens4be33702015-04-28 15:13:30 -07006061 TRACE("(GLint location = %d, GLsizei count = %d, const GLint* v = %p)", location, count, v);
Nicolas Capens264f1522015-01-09 17:21:17 -05006062
6063 if(count < 0)
6064 {
6065 return error(GL_INVALID_VALUE);
6066 }
6067
6068 if(location == -1)
6069 {
6070 return;
6071 }
6072
Nicolas Capensf4486fd2015-01-22 11:10:37 -05006073 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05006074
6075 if(context)
6076 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05006077 if(context->getListIndex() != 0)
6078 {
6079 UNIMPLEMENTED();
6080 }
6081
Nicolas Capensf4486fd2015-01-22 11:10:37 -05006082 gl::Program *program = context->getCurrentProgram();
Nicolas Capens264f1522015-01-09 17:21:17 -05006083
6084 if(!program)
6085 {
6086 return error(GL_INVALID_OPERATION);
6087 }
6088
6089 if(!program->setUniform2iv(location, count, v))
6090 {
6091 return error(GL_INVALID_OPERATION);
6092 }
6093 }
6094}
6095
Nicolas Capensa9b49372015-01-30 00:33:26 -05006096void APIENTRY glUniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z)
Nicolas Capens264f1522015-01-09 17:21:17 -05006097{
Maxime Grégoire20942c02015-07-16 14:12:47 -04006098 GLfloat xyz[3] = { x, y, z };
Nicolas Capens264f1522015-01-09 17:21:17 -05006099
6100 glUniform3fv(location, 1, (GLfloat*)&xyz);
6101}
6102
Nicolas Capensa9b49372015-01-30 00:33:26 -05006103void APIENTRY glUniform3fv(GLint location, GLsizei count, const GLfloat* v)
Nicolas Capens264f1522015-01-09 17:21:17 -05006104{
Nicolas Capens4be33702015-04-28 15:13:30 -07006105 TRACE("(GLint location = %d, GLsizei count = %d, const GLfloat* v = %p)", location, count, v);
Nicolas Capens264f1522015-01-09 17:21:17 -05006106
6107 if(count < 0)
6108 {
6109 return error(GL_INVALID_VALUE);
6110 }
6111
6112 if(location == -1)
6113 {
6114 return;
6115 }
6116
Nicolas Capensf4486fd2015-01-22 11:10:37 -05006117 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05006118
6119 if(context)
6120 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05006121 if(context->getListIndex() != 0)
6122 {
6123 UNIMPLEMENTED();
6124 }
6125
Nicolas Capensf4486fd2015-01-22 11:10:37 -05006126 gl::Program *program = context->getCurrentProgram();
Nicolas Capens264f1522015-01-09 17:21:17 -05006127
6128 if(!program)
6129 {
6130 return error(GL_INVALID_OPERATION);
6131 }
6132
6133 if(!program->setUniform3fv(location, count, v))
6134 {
6135 return error(GL_INVALID_OPERATION);
6136 }
6137 }
6138}
6139
Nicolas Capensa9b49372015-01-30 00:33:26 -05006140void APIENTRY glUniform3i(GLint location, GLint x, GLint y, GLint z)
Nicolas Capens264f1522015-01-09 17:21:17 -05006141{
Maxime Grégoire20942c02015-07-16 14:12:47 -04006142 GLint xyz[3] = { x, y, z };
Nicolas Capens264f1522015-01-09 17:21:17 -05006143
6144 glUniform3iv(location, 1, (GLint*)&xyz);
6145}
6146
Nicolas Capensa9b49372015-01-30 00:33:26 -05006147void APIENTRY glUniform3iv(GLint location, GLsizei count, const GLint* v)
Nicolas Capens264f1522015-01-09 17:21:17 -05006148{
Nicolas Capens4be33702015-04-28 15:13:30 -07006149 TRACE("(GLint location = %d, GLsizei count = %d, const GLint* v = %p)", location, count, v);
Nicolas Capens264f1522015-01-09 17:21:17 -05006150
6151 if(count < 0)
6152 {
6153 return error(GL_INVALID_VALUE);
6154 }
6155
6156 if(location == -1)
6157 {
6158 return;
6159 }
6160
Nicolas Capensf4486fd2015-01-22 11:10:37 -05006161 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05006162
6163 if(context)
6164 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05006165 if(context->getListIndex() != 0)
6166 {
6167 UNIMPLEMENTED();
6168 }
6169
Nicolas Capensf4486fd2015-01-22 11:10:37 -05006170 gl::Program *program = context->getCurrentProgram();
Nicolas Capens264f1522015-01-09 17:21:17 -05006171
6172 if(!program)
6173 {
6174 return error(GL_INVALID_OPERATION);
6175 }
6176
6177 if(!program->setUniform3iv(location, count, v))
6178 {
6179 return error(GL_INVALID_OPERATION);
6180 }
6181 }
6182}
6183
Nicolas Capensa9b49372015-01-30 00:33:26 -05006184void APIENTRY glUniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
Nicolas Capens264f1522015-01-09 17:21:17 -05006185{
Maxime Grégoire20942c02015-07-16 14:12:47 -04006186 GLfloat xyzw[4] = { x, y, z, w };
Nicolas Capens264f1522015-01-09 17:21:17 -05006187
6188 glUniform4fv(location, 1, (GLfloat*)&xyzw);
6189}
6190
Nicolas Capensa9b49372015-01-30 00:33:26 -05006191void APIENTRY glUniform4fv(GLint location, GLsizei count, const GLfloat* v)
Nicolas Capens264f1522015-01-09 17:21:17 -05006192{
Nicolas Capens4be33702015-04-28 15:13:30 -07006193 TRACE("(GLint location = %d, GLsizei count = %d, const GLfloat* v = %p)", location, count, v);
Nicolas Capens264f1522015-01-09 17:21:17 -05006194
6195 if(count < 0)
6196 {
6197 return error(GL_INVALID_VALUE);
6198 }
6199
6200 if(location == -1)
6201 {
6202 return;
6203 }
6204
Nicolas Capensf4486fd2015-01-22 11:10:37 -05006205 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05006206
6207 if(context)
6208 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05006209 if(context->getListIndex() != 0)
6210 {
6211 UNIMPLEMENTED();
6212 }
6213
Nicolas Capensf4486fd2015-01-22 11:10:37 -05006214 gl::Program *program = context->getCurrentProgram();
Nicolas Capens264f1522015-01-09 17:21:17 -05006215
6216 if(!program)
6217 {
6218 return error(GL_INVALID_OPERATION);
6219 }
6220
6221 if(!program->setUniform4fv(location, count, v))
6222 {
6223 return error(GL_INVALID_OPERATION);
6224 }
6225 }
6226}
6227
Nicolas Capensa9b49372015-01-30 00:33:26 -05006228void APIENTRY glUniform4i(GLint location, GLint x, GLint y, GLint z, GLint w)
Nicolas Capens264f1522015-01-09 17:21:17 -05006229{
Maxime Grégoire20942c02015-07-16 14:12:47 -04006230 GLint xyzw[4] = { x, y, z, w };
Nicolas Capens264f1522015-01-09 17:21:17 -05006231
6232 glUniform4iv(location, 1, (GLint*)&xyzw);
6233}
6234
Nicolas Capensa9b49372015-01-30 00:33:26 -05006235void APIENTRY glUniform4iv(GLint location, GLsizei count, const GLint* v)
Nicolas Capens264f1522015-01-09 17:21:17 -05006236{
Nicolas Capens4be33702015-04-28 15:13:30 -07006237 TRACE("(GLint location = %d, GLsizei count = %d, const GLint* v = %p)", location, count, v);
Nicolas Capens264f1522015-01-09 17:21:17 -05006238
6239 if(count < 0)
6240 {
6241 return error(GL_INVALID_VALUE);
6242 }
6243
6244 if(location == -1)
6245 {
6246 return;
6247 }
6248
Nicolas Capensf4486fd2015-01-22 11:10:37 -05006249 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05006250
6251 if(context)
6252 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05006253 if(context->getListIndex() != 0)
6254 {
6255 UNIMPLEMENTED();
6256 }
6257
Nicolas Capensf4486fd2015-01-22 11:10:37 -05006258 gl::Program *program = context->getCurrentProgram();
Nicolas Capens264f1522015-01-09 17:21:17 -05006259
6260 if(!program)
6261 {
6262 return error(GL_INVALID_OPERATION);
6263 }
6264
6265 if(!program->setUniform4iv(location, count, v))
6266 {
6267 return error(GL_INVALID_OPERATION);
6268 }
6269 }
6270}
6271
Nicolas Capensa9b49372015-01-30 00:33:26 -05006272void APIENTRY glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
Nicolas Capens264f1522015-01-09 17:21:17 -05006273{
Nicolas Capens4be33702015-04-28 15:13:30 -07006274 TRACE("(GLint location = %d, GLsizei count = %d, GLboolean transpose = %d, const GLfloat* value = %p)",
Maxime Grégoire20942c02015-07-16 14:12:47 -04006275 location, count, transpose, value);
Nicolas Capens264f1522015-01-09 17:21:17 -05006276
6277 if(count < 0 || transpose != GL_FALSE)
6278 {
6279 return error(GL_INVALID_VALUE);
6280 }
6281
6282 if(location == -1)
6283 {
6284 return;
6285 }
6286
Nicolas Capensf4486fd2015-01-22 11:10:37 -05006287 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05006288
6289 if(context)
6290 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05006291 if(context->getListIndex() != 0)
6292 {
6293 UNIMPLEMENTED();
6294 }
6295
Nicolas Capensf4486fd2015-01-22 11:10:37 -05006296 gl::Program *program = context->getCurrentProgram();
Nicolas Capens264f1522015-01-09 17:21:17 -05006297
6298 if(!program)
6299 {
6300 return error(GL_INVALID_OPERATION);
6301 }
6302
6303 if(!program->setUniformMatrix2fv(location, count, value))
6304 {
6305 return error(GL_INVALID_OPERATION);
6306 }
6307 }
6308}
6309
Nicolas Capensa9b49372015-01-30 00:33:26 -05006310void APIENTRY glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
Nicolas Capens264f1522015-01-09 17:21:17 -05006311{
Nicolas Capens4be33702015-04-28 15:13:30 -07006312 TRACE("(GLint location = %d, GLsizei count = %d, GLboolean transpose = %d, const GLfloat* value = %p)",
Maxime Grégoire20942c02015-07-16 14:12:47 -04006313 location, count, transpose, value);
Nicolas Capens264f1522015-01-09 17:21:17 -05006314
6315 if(count < 0 || transpose != GL_FALSE)
6316 {
6317 return error(GL_INVALID_VALUE);
6318 }
6319
6320 if(location == -1)
6321 {
6322 return;
6323 }
6324
Nicolas Capensf4486fd2015-01-22 11:10:37 -05006325 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05006326
6327 if(context)
6328 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05006329 if(context->getListIndex() != 0)
6330 {
6331 UNIMPLEMENTED();
6332 }
6333
Nicolas Capensf4486fd2015-01-22 11:10:37 -05006334 gl::Program *program = context->getCurrentProgram();
Nicolas Capens264f1522015-01-09 17:21:17 -05006335
6336 if(!program)
6337 {
6338 return error(GL_INVALID_OPERATION);
6339 }
6340
6341 if(!program->setUniformMatrix3fv(location, count, value))
6342 {
6343 return error(GL_INVALID_OPERATION);
6344 }
6345 }
6346}
6347
Nicolas Capensa9b49372015-01-30 00:33:26 -05006348void APIENTRY glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
Nicolas Capens264f1522015-01-09 17:21:17 -05006349{
Nicolas Capens4be33702015-04-28 15:13:30 -07006350 TRACE("(GLint location = %d, GLsizei count = %d, GLboolean transpose = %d, const GLfloat* value = %p)",
Maxime Grégoire20942c02015-07-16 14:12:47 -04006351 location, count, transpose, value);
Nicolas Capens264f1522015-01-09 17:21:17 -05006352
6353 if(count < 0 || transpose != GL_FALSE)
6354 {
6355 return error(GL_INVALID_VALUE);
6356 }
6357
6358 if(location == -1)
6359 {
6360 return;
6361 }
6362
Nicolas Capensf4486fd2015-01-22 11:10:37 -05006363 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05006364
6365 if(context)
6366 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05006367 if(context->getListIndex() != 0)
6368 {
6369 UNIMPLEMENTED();
6370 }
6371
Nicolas Capensf4486fd2015-01-22 11:10:37 -05006372 gl::Program *program = context->getCurrentProgram();
Nicolas Capens264f1522015-01-09 17:21:17 -05006373
6374 if(!program)
6375 {
6376 return error(GL_INVALID_OPERATION);
6377 }
6378
6379 if(!program->setUniformMatrix4fv(location, count, value))
6380 {
6381 return error(GL_INVALID_OPERATION);
6382 }
6383 }
6384}
6385
Nicolas Capensa9b49372015-01-30 00:33:26 -05006386void APIENTRY glUseProgram(GLuint program)
Nicolas Capens264f1522015-01-09 17:21:17 -05006387{
6388 TRACE("(GLuint program = %d)", program);
6389
Nicolas Capensf4486fd2015-01-22 11:10:37 -05006390 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05006391
6392 if(context)
6393 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05006394 if(context->getListIndex() != 0)
6395 {
6396 UNIMPLEMENTED();
6397 }
6398
Nicolas Capensf4486fd2015-01-22 11:10:37 -05006399 gl::Program *programObject = context->getProgram(program);
Nicolas Capens264f1522015-01-09 17:21:17 -05006400
6401 if(!programObject && program != 0)
6402 {
6403 if(context->getShader(program))
6404 {
6405 return error(GL_INVALID_OPERATION);
6406 }
6407 else
6408 {
6409 return error(GL_INVALID_VALUE);
6410 }
6411 }
6412
6413 if(program != 0 && !programObject->isLinked())
6414 {
6415 return error(GL_INVALID_OPERATION);
6416 }
6417
6418 context->useProgram(program);
6419 }
6420}
6421
Nicolas Capensa9b49372015-01-30 00:33:26 -05006422void APIENTRY glValidateProgram(GLuint program)
Nicolas Capens264f1522015-01-09 17:21:17 -05006423{
6424 TRACE("(GLuint program = %d)", program);
6425
Nicolas Capensf4486fd2015-01-22 11:10:37 -05006426 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05006427
6428 if(context)
6429 {
Nicolas Capensf4486fd2015-01-22 11:10:37 -05006430 gl::Program *programObject = context->getProgram(program);
Nicolas Capens264f1522015-01-09 17:21:17 -05006431
6432 if(!programObject)
6433 {
6434 if(context->getShader(program))
6435 {
6436 return error(GL_INVALID_OPERATION);
6437 }
6438 else
6439 {
6440 return error(GL_INVALID_VALUE);
6441 }
6442 }
6443
6444 programObject->validate();
6445 }
6446}
6447
Nicolas Capensa9b49372015-01-30 00:33:26 -05006448void APIENTRY glVertexAttrib1f(GLuint index, GLfloat x)
Nicolas Capens264f1522015-01-09 17:21:17 -05006449{
6450 TRACE("(GLuint index = %d, GLfloat x = %f)", index, x);
6451
Nicolas Capensf4486fd2015-01-22 11:10:37 -05006452 if(index >= gl::MAX_VERTEX_ATTRIBS)
Nicolas Capens264f1522015-01-09 17:21:17 -05006453 {
6454 return error(GL_INVALID_VALUE);
6455 }
6456
Nicolas Capensf4486fd2015-01-22 11:10:37 -05006457 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05006458
6459 if(context)
6460 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05006461 if(context->getListIndex() != 0)
6462 {
6463 UNIMPLEMENTED();
6464 }
6465
6466 //GLfloat vals[4] = { x, 0, 0, 1 };
6467 context->setVertexAttrib(index, x, 0, 0, 1);
Nicolas Capens264f1522015-01-09 17:21:17 -05006468 }
6469}
6470
Nicolas Capensa9b49372015-01-30 00:33:26 -05006471void APIENTRY glVertexAttrib1fv(GLuint index, const GLfloat* values)
Nicolas Capens264f1522015-01-09 17:21:17 -05006472{
Nicolas Capens4be33702015-04-28 15:13:30 -07006473 TRACE("(GLuint index = %d, const GLfloat* values = %p)", index, values);
Nicolas Capens264f1522015-01-09 17:21:17 -05006474
Nicolas Capensf4486fd2015-01-22 11:10:37 -05006475 if(index >= gl::MAX_VERTEX_ATTRIBS)
Nicolas Capens264f1522015-01-09 17:21:17 -05006476 {
6477 return error(GL_INVALID_VALUE);
6478 }
6479
Nicolas Capensf4486fd2015-01-22 11:10:37 -05006480 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05006481
6482 if(context)
6483 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05006484 if(context->getListIndex() != 0)
6485 {
6486 UNIMPLEMENTED();
6487 }
6488
6489 //GLfloat vals[4] = { values[0], 0, 0, 1 };
6490 context->setVertexAttrib(index, values[0], 0, 0, 1);
Nicolas Capens264f1522015-01-09 17:21:17 -05006491 }
6492}
6493
Nicolas Capensa9b49372015-01-30 00:33:26 -05006494void APIENTRY glVertexAttrib2f(GLuint index, GLfloat x, GLfloat y)
Nicolas Capens264f1522015-01-09 17:21:17 -05006495{
6496 TRACE("(GLuint index = %d, GLfloat x = %f, GLfloat y = %f)", index, x, y);
6497
Nicolas Capensf4486fd2015-01-22 11:10:37 -05006498 if(index >= gl::MAX_VERTEX_ATTRIBS)
Nicolas Capens264f1522015-01-09 17:21:17 -05006499 {
6500 return error(GL_INVALID_VALUE);
6501 }
6502
Nicolas Capensf4486fd2015-01-22 11:10:37 -05006503 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05006504
6505 if(context)
6506 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05006507 if(context->getListIndex() != 0)
6508 {
6509 UNIMPLEMENTED();
6510 }
6511
6512 //GLfloat vals[4] = { x, y, 0, 1 };
6513 context->setVertexAttrib(index, x, y, 0, 1);
Nicolas Capens264f1522015-01-09 17:21:17 -05006514 }
6515}
6516
Nicolas Capensa9b49372015-01-30 00:33:26 -05006517void APIENTRY glVertexAttrib2fv(GLuint index, const GLfloat* values)
Nicolas Capens264f1522015-01-09 17:21:17 -05006518{
Nicolas Capens4be33702015-04-28 15:13:30 -07006519 TRACE("(GLuint index = %d, const GLfloat* values = %p)", index, values);
Nicolas Capens264f1522015-01-09 17:21:17 -05006520
Nicolas Capensf4486fd2015-01-22 11:10:37 -05006521 if(index >= gl::MAX_VERTEX_ATTRIBS)
Nicolas Capens264f1522015-01-09 17:21:17 -05006522 {
6523 return error(GL_INVALID_VALUE);
6524 }
6525
Nicolas Capensf4486fd2015-01-22 11:10:37 -05006526 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05006527
6528 if(context)
6529 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05006530 if(context->getListIndex() != 0)
6531 {
6532 UNIMPLEMENTED();
6533 }
6534
6535 //GLfloat vals[4] = { };
6536 context->setVertexAttrib(index, values[0], values[1], 0, 1);
Nicolas Capens264f1522015-01-09 17:21:17 -05006537 }
6538}
6539
Nicolas Capensa9b49372015-01-30 00:33:26 -05006540void APIENTRY glVertexAttrib3f(GLuint index, GLfloat x, GLfloat y, GLfloat z)
Nicolas Capens264f1522015-01-09 17:21:17 -05006541{
6542 TRACE("(GLuint index = %d, GLfloat x = %f, GLfloat y = %f, GLfloat z = %f)", index, x, y, z);
6543
Nicolas Capensf4486fd2015-01-22 11:10:37 -05006544 if(index >= gl::MAX_VERTEX_ATTRIBS)
Nicolas Capens264f1522015-01-09 17:21:17 -05006545 {
6546 return error(GL_INVALID_VALUE);
6547 }
6548
Nicolas Capensf4486fd2015-01-22 11:10:37 -05006549 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05006550
6551 if(context)
6552 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05006553 if(context->getListIndex() != 0)
6554 {
6555 UNIMPLEMENTED();
6556 }
6557
6558 //GLfloat vals[4] = { x, y, z, 1 };
6559 context->setVertexAttrib(index, x, y, z, 1);
Nicolas Capens264f1522015-01-09 17:21:17 -05006560 }
6561}
6562
Nicolas Capensa9b49372015-01-30 00:33:26 -05006563void APIENTRY glVertexAttrib3fv(GLuint index, const GLfloat* values)
Nicolas Capens264f1522015-01-09 17:21:17 -05006564{
Nicolas Capens4be33702015-04-28 15:13:30 -07006565 TRACE("(GLuint index = %d, const GLfloat* values = %p)", index, values);
Nicolas Capens264f1522015-01-09 17:21:17 -05006566
Nicolas Capensf4486fd2015-01-22 11:10:37 -05006567 if(index >= gl::MAX_VERTEX_ATTRIBS)
Nicolas Capens264f1522015-01-09 17:21:17 -05006568 {
6569 return error(GL_INVALID_VALUE);
6570 }
6571
Nicolas Capensf4486fd2015-01-22 11:10:37 -05006572 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05006573
6574 if(context)
6575 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05006576 if(context->getListIndex() != 0)
6577 {
6578 UNIMPLEMENTED();
6579 }
6580
6581 //GLfloat vals[4] = { values[0], values[1], values[2], 1 };
6582 context->setVertexAttrib(index, values[0], values[1], values[2], 1);
Nicolas Capens264f1522015-01-09 17:21:17 -05006583 }
6584}
6585
Nicolas Capensa9b49372015-01-30 00:33:26 -05006586void APIENTRY glVertexAttrib4f(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
Nicolas Capens264f1522015-01-09 17:21:17 -05006587{
6588 TRACE("(GLuint index = %d, GLfloat x = %f, GLfloat y = %f, GLfloat z = %f, GLfloat w = %f)", index, x, y, z, w);
6589
Nicolas Capensf4486fd2015-01-22 11:10:37 -05006590 if(index >= gl::MAX_VERTEX_ATTRIBS)
Nicolas Capens264f1522015-01-09 17:21:17 -05006591 {
6592 return error(GL_INVALID_VALUE);
6593 }
6594
Nicolas Capensf4486fd2015-01-22 11:10:37 -05006595 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05006596
6597 if(context)
6598 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05006599 if(context->getListIndex() != 0)
6600 {
6601 UNIMPLEMENTED();
6602 }
6603
6604 //GLfloat vals[4] = { x, y, z, w };
6605 context->setVertexAttrib(index, x, y, z, w);
Nicolas Capens264f1522015-01-09 17:21:17 -05006606 }
6607}
6608
Nicolas Capensa9b49372015-01-30 00:33:26 -05006609void APIENTRY glVertexAttrib4fv(GLuint index, const GLfloat* values)
Nicolas Capens264f1522015-01-09 17:21:17 -05006610{
Nicolas Capens4be33702015-04-28 15:13:30 -07006611 TRACE("(GLuint index = %d, const GLfloat* values = %p)", index, values);
Nicolas Capens264f1522015-01-09 17:21:17 -05006612
Nicolas Capensf4486fd2015-01-22 11:10:37 -05006613 if(index >= gl::MAX_VERTEX_ATTRIBS)
Nicolas Capens264f1522015-01-09 17:21:17 -05006614 {
6615 return error(GL_INVALID_VALUE);
6616 }
6617
Nicolas Capensf4486fd2015-01-22 11:10:37 -05006618 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05006619
6620 if(context)
6621 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05006622 if(context->getListIndex() != 0)
6623 {
6624 UNIMPLEMENTED();
6625 }
6626
6627 context->setVertexAttrib(index, values[0], values[1], values[2], values[3]);
Nicolas Capens264f1522015-01-09 17:21:17 -05006628 }
6629}
6630
Nicolas Capensa9b49372015-01-30 00:33:26 -05006631void APIENTRY glVertexAttribPointer(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr)
Nicolas Capens264f1522015-01-09 17:21:17 -05006632{
6633 TRACE("(GLuint index = %d, GLint size = %d, GLenum type = 0x%X, "
Maxime Grégoire20942c02015-07-16 14:12:47 -04006634 "GLboolean normalized = %d, GLsizei stride = %d, const GLvoid* ptr = %p)",
6635 index, size, type, normalized, stride, ptr);
Nicolas Capens264f1522015-01-09 17:21:17 -05006636
Nicolas Capensf4486fd2015-01-22 11:10:37 -05006637 if(index >= gl::MAX_VERTEX_ATTRIBS)
Nicolas Capens264f1522015-01-09 17:21:17 -05006638 {
6639 return error(GL_INVALID_VALUE);
6640 }
6641
6642 if(size < 1 || size > 4)
6643 {
6644 return error(GL_INVALID_VALUE);
6645 }
6646
6647 switch(type)
6648 {
6649 case GL_BYTE:
6650 case GL_UNSIGNED_BYTE:
6651 case GL_SHORT:
6652 case GL_UNSIGNED_SHORT:
6653 case GL_FIXED:
6654 case GL_FLOAT:
6655 break;
6656 default:
6657 return error(GL_INVALID_ENUM);
6658 }
6659
6660 if(stride < 0)
6661 {
6662 return error(GL_INVALID_VALUE);
6663 }
6664
Nicolas Capensf4486fd2015-01-22 11:10:37 -05006665 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05006666
6667 if(context)
6668 {
6669 context->setVertexAttribState(index, context->getArrayBuffer(), size, type, (normalized == GL_TRUE), stride, ptr);
6670 }
6671}
6672
Nicolas Capensa9b49372015-01-30 00:33:26 -05006673void APIENTRY glViewport(GLint x, GLint y, GLsizei width, GLsizei height)
Nicolas Capens264f1522015-01-09 17:21:17 -05006674{
6675 TRACE("(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d)", x, y, width, height);
6676
6677 if(width < 0 || height < 0)
6678 {
6679 return error(GL_INVALID_VALUE);
6680 }
6681
Nicolas Capensf4486fd2015-01-22 11:10:37 -05006682 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05006683
6684 if(context)
6685 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05006686 if(context->getListIndex() != 0)
6687 {
6688 UNIMPLEMENTED();
6689 }
6690
Nicolas Capens264f1522015-01-09 17:21:17 -05006691 context->setViewportParams(x, y, width, height);
6692 }
6693}
6694
Nicolas Capensa9b49372015-01-30 00:33:26 -05006695void APIENTRY glBlitFramebufferANGLE(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
Maxime Grégoire20942c02015-07-16 14:12:47 -04006696 GLbitfield mask, GLenum filter)
Nicolas Capens264f1522015-01-09 17:21:17 -05006697{
6698 TRACE("(GLint srcX0 = %d, GLint srcY0 = %d, GLint srcX1 = %d, GLint srcY1 = %d, "
Maxime Grégoire20942c02015-07-16 14:12:47 -04006699 "GLint dstX0 = %d, GLint dstY0 = %d, GLint dstX1 = %d, GLint dstY1 = %d, "
6700 "GLbitfield mask = 0x%X, GLenum filter = 0x%X)",
6701 srcX0, srcY0, srcX1, srcX1, dstX0, dstY0, dstX1, dstY1, mask, filter);
Nicolas Capens264f1522015-01-09 17:21:17 -05006702
6703 switch(filter)
6704 {
6705 case GL_NEAREST:
6706 break;
6707 default:
6708 return error(GL_INVALID_ENUM);
6709 }
6710
6711 if((mask & ~(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)) != 0)
6712 {
6713 return error(GL_INVALID_VALUE);
6714 }
6715
6716 if(srcX1 - srcX0 != dstX1 - dstX0 || srcY1 - srcY0 != dstY1 - dstY0)
6717 {
6718 ERR("Scaling and flipping in BlitFramebufferANGLE not supported by this implementation");
6719 return error(GL_INVALID_OPERATION);
6720 }
6721
Nicolas Capensf4486fd2015-01-22 11:10:37 -05006722 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05006723
6724 if(context)
6725 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05006726 if(context->getListIndex() != 0)
6727 {
6728 UNIMPLEMENTED();
6729 }
6730
Nicolas Capens7cc75e12015-01-29 14:44:24 -05006731 if(context->getReadFramebufferName() == context->getDrawFramebufferName())
Nicolas Capens264f1522015-01-09 17:21:17 -05006732 {
6733 ERR("Blits with the same source and destination framebuffer are not supported by this implementation.");
6734 return error(GL_INVALID_OPERATION);
6735 }
6736
6737 context->blitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask);
6738 }
6739}
6740
Nicolas Capensa9b49372015-01-30 00:33:26 -05006741void APIENTRY glTexImage3DOES(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth,
Maxime Grégoire20942c02015-07-16 14:12:47 -04006742 GLint border, GLenum format, GLenum type, const GLvoid* pixels)
Nicolas Capens264f1522015-01-09 17:21:17 -05006743{
6744 TRACE("(GLenum target = 0x%X, GLint level = %d, GLenum internalformat = 0x%X, "
Maxime Grégoire20942c02015-07-16 14:12:47 -04006745 "GLsizei width = %d, GLsizei height = %d, GLsizei depth = %d, GLint border = %d, "
6746 "GLenum format = 0x%X, GLenum type = 0x%x, const GLvoid* pixels = %p)",
6747 target, level, internalformat, width, height, depth, border, format, type, pixels);
Nicolas Capens264f1522015-01-09 17:21:17 -05006748
6749 UNIMPLEMENTED(); // FIXME
6750}
6751
Nicolas Capensa9b49372015-01-30 00:33:26 -05006752void WINAPI GlmfBeginGlsBlock()
Nicolas Capens264f1522015-01-09 17:21:17 -05006753{
Nicolas Capensa9b49372015-01-30 00:33:26 -05006754 UNIMPLEMENTED();
6755}
6756
6757void WINAPI GlmfCloseMetaFile()
6758{
6759 UNIMPLEMENTED();
6760}
6761
6762void WINAPI GlmfEndGlsBlock()
6763{
6764 UNIMPLEMENTED();
6765}
6766
6767void WINAPI GlmfEndPlayback()
6768{
6769 UNIMPLEMENTED();
6770}
6771
6772void WINAPI GlmfInitPlayback()
6773{
6774 UNIMPLEMENTED();
6775}
6776
6777void WINAPI GlmfPlayGlsRecord()
6778{
6779 UNIMPLEMENTED();
6780}
6781
6782void APIENTRY glAccum(GLenum op, GLfloat value)
6783{
6784 UNIMPLEMENTED();
6785}
6786
6787void APIENTRY glAlphaFunc(GLenum func, GLclampf ref)
6788{
6789 TRACE("(GLenum func = 0x%X, GLclampf ref = %f)", func, ref);
Maxime Grégoire20942c02015-07-16 14:12:47 -04006790
Nicolas Capensa9b49372015-01-30 00:33:26 -05006791 gl::Context *context = gl::getContext();
6792
6793 if(context)
Nicolas Capens264f1522015-01-09 17:21:17 -05006794 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05006795 if(context->getListIndex() != 0)
6796 {
6797 UNIMPLEMENTED();
6798 }
6799
6800 context->alphaFunc(func, ref);
Nicolas Capens264f1522015-01-09 17:21:17 -05006801 }
Nicolas Capensa9b49372015-01-30 00:33:26 -05006802}
Nicolas Capens264f1522015-01-09 17:21:17 -05006803
Nicolas Capensa9b49372015-01-30 00:33:26 -05006804GLboolean APIENTRY glAreTexturesResident(GLsizei n, const GLuint *textures, GLboolean *residences)
6805{
6806 UNIMPLEMENTED();
6807 return GL_FALSE;
6808}
Nicolas Capens264f1522015-01-09 17:21:17 -05006809
Nicolas Capensa9b49372015-01-30 00:33:26 -05006810void APIENTRY glArrayElement(GLint i)
6811{
6812 UNIMPLEMENTED();
6813}
6814
6815void APIENTRY glBegin(GLenum mode)
6816{
6817 TRACE("(GLenum mode = 0x%X)", mode);
Maxime Grégoire20942c02015-07-16 14:12:47 -04006818
Nicolas Capensa9b49372015-01-30 00:33:26 -05006819 switch(mode)
Nicolas Capens264f1522015-01-09 17:21:17 -05006820 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05006821 case GL_POINTS:
6822 case GL_LINES:
6823 case GL_LINE_STRIP:
6824 case GL_LINE_LOOP:
6825 case GL_TRIANGLES:
6826 case GL_TRIANGLE_STRIP:
6827 case GL_TRIANGLE_FAN:
6828 case GL_QUADS:
6829 case GL_QUAD_STRIP:
6830 case GL_POLYGON:
Nicolas Capens264f1522015-01-09 17:21:17 -05006831 break;
6832 default:
6833 return error(GL_INVALID_ENUM);
6834 }
6835
Nicolas Capensf4486fd2015-01-22 11:10:37 -05006836 gl::Context *context = gl::getContext();
Nicolas Capens264f1522015-01-09 17:21:17 -05006837
6838 if(context)
6839 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05006840 if(context->getListIndex() != 0)
Nicolas Capens264f1522015-01-09 17:21:17 -05006841 {
Nicolas Capensa9b49372015-01-30 00:33:26 -05006842 UNIMPLEMENTED();
Nicolas Capens264f1522015-01-09 17:21:17 -05006843 }
6844
Nicolas Capensa9b49372015-01-30 00:33:26 -05006845 context->begin(mode);
Nicolas Capens264f1522015-01-09 17:21:17 -05006846 }
6847}
6848
Nicolas Capensa9b49372015-01-30 00:33:26 -05006849void APIENTRY glBitmap(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap)
Nicolas Capens264f1522015-01-09 17:21:17 -05006850{
Nicolas Capens264f1522015-01-09 17:21:17 -05006851 UNIMPLEMENTED();
6852}
6853
Nicolas Capensa9b49372015-01-30 00:33:26 -05006854void APIENTRY glCallList(GLuint list)
Nicolas Capens264f1522015-01-09 17:21:17 -05006855{
Nicolas Capensa9b49372015-01-30 00:33:26 -05006856 TRACE("(GLuint list = %d)", list);
6857
6858 if(list == 0)
6859 {
6860 return error(GL_INVALID_VALUE);
6861 }
6862
6863 gl::Context *context = gl::getContext();
6864
6865 if(context)
6866 {
6867 if(context->getListIndex() != 0)
6868 {
6869 UNIMPLEMENTED();
6870 }
6871
6872 context->callList(list);
6873 }
6874}
6875
6876void APIENTRY glCallLists(GLsizei n, GLenum type, const GLvoid *lists)
6877{
6878 TRACE("(GLsizei n = %d, GLenum type = 0x%X, const GLvoid *lists)", n, type);
6879
6880 gl::Context *context = gl::getContext();
6881
6882 if(context)
6883 {
6884 if(context->getListIndex() != 0)
6885 {
6886 UNIMPLEMENTED();
6887 }
6888
6889 for(int i = 0; i < n; i++)
6890 {
6891 switch(type)
6892 {
6893 case GL_UNSIGNED_INT: context->callList(((unsigned int*)lists)[i]); break;
6894 default:
6895 UNIMPLEMENTED();
6896 UNREACHABLE();
6897 }
6898 }
6899 }
6900}
6901
6902void APIENTRY glClearAccum(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
6903{
6904 UNIMPLEMENTED();
6905}
6906
6907void APIENTRY glClearDepth(GLclampd depth)
6908{
6909 TRACE("(GLclampd depth = %d)", depth);
Maxime Grégoire20942c02015-07-16 14:12:47 -04006910
Nicolas Capensa9b49372015-01-30 00:33:26 -05006911 glClearDepthf((float)depth); // FIXME
6912}
6913
6914void APIENTRY glClearIndex(GLfloat c)
6915{
6916 UNIMPLEMENTED();
6917}
6918
6919void APIENTRY glClipPlane(GLenum plane, const GLdouble *equation)
6920{
6921 UNIMPLEMENTED();
6922}
6923
6924void APIENTRY glColor3b(GLbyte red, GLbyte green, GLbyte blue)
6925{
6926 UNIMPLEMENTED();
6927}
6928
6929void APIENTRY glColor3bv(const GLbyte *v)
6930{
6931 UNIMPLEMENTED();
6932}
6933
6934void APIENTRY glColor3d(GLdouble red, GLdouble green, GLdouble blue)
6935{
6936 UNIMPLEMENTED();
6937}
6938
6939void APIENTRY glColor3dv(const GLdouble *v)
6940{
6941 UNIMPLEMENTED();
6942}
6943
6944void APIENTRY glColor3f(GLfloat red, GLfloat green, GLfloat blue)
6945{
6946 TRACE("(GLfloat red = %f, GLfloat green = %f, GLfloat blue = %f)", red, green, blue);
Maxime Grégoire20942c02015-07-16 14:12:47 -04006947
Nicolas Capensa9b49372015-01-30 00:33:26 -05006948 gl::Context *context = gl::getContext();
6949
6950 if(context)
6951 {
6952 if(context->getListIndex() != 0)
6953 {
6954 UNIMPLEMENTED();
6955 }
6956
6957 //context->color(red, green, blue, 1.0f);
6958 //GLfloat vals[4] = {};
6959 context->setVertexAttrib(sw::Color0, red, green, blue, 1);
6960 }
6961}
6962
6963void APIENTRY glColor3fv(const GLfloat *v)
6964{
6965 UNIMPLEMENTED();
6966}
6967
6968void APIENTRY glColor3i(GLint red, GLint green, GLint blue)
6969{
6970 UNIMPLEMENTED();
6971}
6972
6973void APIENTRY glColor3iv(const GLint *v)
6974{
6975 UNIMPLEMENTED();
6976}
6977
6978void APIENTRY glColor3s(GLshort red, GLshort green, GLshort blue)
6979{
6980 UNIMPLEMENTED();
6981}
6982
6983void APIENTRY glColor3sv(const GLshort *v)
6984{
6985 UNIMPLEMENTED();
6986}
6987
6988void APIENTRY glColor3ub(GLubyte red, GLubyte green, GLubyte blue)
6989{
6990 UNIMPLEMENTED();
6991}
6992
6993void APIENTRY glColor3ubv(const GLubyte *v)
6994{
6995 UNIMPLEMENTED();
6996}
6997
6998void APIENTRY glColor3ui(GLuint red, GLuint green, GLuint blue)
6999{
7000 UNIMPLEMENTED();
7001}
7002
7003void APIENTRY glColor3uiv(const GLuint *v)
7004{
7005 UNIMPLEMENTED();
7006}
7007
7008void APIENTRY glColor3us(GLushort red, GLushort green, GLushort blue)
7009{
7010 UNIMPLEMENTED();
7011}
7012
7013void APIENTRY glColor3usv(const GLushort *v)
7014{
7015 UNIMPLEMENTED();
7016}
7017
7018void APIENTRY glColor4b(GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha)
7019{
7020 UNIMPLEMENTED();
7021}
7022
7023void APIENTRY glColor4bv(const GLbyte *v)
7024{
7025 UNIMPLEMENTED();
7026}
7027
7028void APIENTRY glColor4d(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha)
7029{
7030 UNIMPLEMENTED();
7031}
7032
7033void APIENTRY glColor4dv(const GLdouble *v)
7034{
7035 UNIMPLEMENTED();
7036}
7037
7038void APIENTRY glColor4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
7039{
7040 TRACE("(GLfloat red = %f, GLfloat green = %f, GLfloat blue = %f, GLfloat alpha = %f)", red, green, blue, alpha);
Maxime Grégoire20942c02015-07-16 14:12:47 -04007041
Nicolas Capensa9b49372015-01-30 00:33:26 -05007042 gl::Context *context = gl::getContext();
7043
7044 if(context)
7045 {
7046 if(context->getListIndex() != 0)
7047 {
7048 UNIMPLEMENTED();
7049 }
7050
7051 //context->color(red, green, blue, alpha);
7052 //GLfloat vals[4] = {red, green, blue, alpha};
7053 context->setVertexAttrib(sw::Color0, red, green, blue, alpha);
7054 }
7055}
7056
7057void APIENTRY glColor4fv(const GLfloat *v)
7058{
7059 UNIMPLEMENTED();
7060}
7061
7062void APIENTRY glColor4i(GLint red, GLint green, GLint blue, GLint alpha)
7063{
7064 UNIMPLEMENTED();
7065}
7066
7067void APIENTRY glColor4iv(const GLint *v)
7068{
7069 UNIMPLEMENTED();
7070}
7071
7072void APIENTRY glColor4s(GLshort red, GLshort green, GLshort blue, GLshort alpha)
7073{
7074 UNIMPLEMENTED();
7075}
7076
7077void APIENTRY glColor4sv(const GLshort *v)
7078{
7079 UNIMPLEMENTED();
7080}
7081
7082void APIENTRY glColor4ub(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha)
7083{
7084 UNIMPLEMENTED();
7085}
7086
7087void APIENTRY glColor4ubv(const GLubyte *v)
7088{
7089 UNIMPLEMENTED();
7090}
7091
7092void APIENTRY glColor4ui(GLuint red, GLuint green, GLuint blue, GLuint alpha)
7093{
7094 UNIMPLEMENTED();
7095}
7096
7097void APIENTRY glColor4uiv(const GLuint *v)
7098{
7099 UNIMPLEMENTED();
7100}
7101
7102void APIENTRY glColor4us(GLushort red, GLushort green, GLushort blue, GLushort alpha)
7103{
7104 UNIMPLEMENTED();
7105}
7106
7107void APIENTRY glColor4usv(const GLushort *v)
7108{
7109 UNIMPLEMENTED();
7110}
7111
7112void APIENTRY glColorMaterial(GLenum face, GLenum mode)
7113{
7114 TRACE("(GLenum face = 0x%X, GLenum mode = 0x%X)", face, mode);
7115
7116 // FIXME: Validate enums
7117
7118 gl::Context *context = gl::getContext();
7119
7120 if(context)
7121 {
7122 if(context->getListIndex() != 0)
7123 {
7124 UNIMPLEMENTED();
7125 }
7126
7127 switch(face)
7128 {
7129 case GL_FRONT:
7130 context->setColorMaterialMode(mode); // FIXME: Front only
7131 break;
7132 case GL_FRONT_AND_BACK:
7133 context->setColorMaterialMode(mode);
7134 break;
7135 default:
7136 UNIMPLEMENTED();
7137 return error(GL_INVALID_ENUM);
7138 }
7139 }
7140}
7141
7142void APIENTRY glColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)
7143{
7144 TRACE("(*)");
7145
7146 glVertexAttribPointer(sw::Color0, size, type, true, stride, pointer);
7147}
7148
7149void APIENTRY glCopyPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type)
7150{
7151 UNIMPLEMENTED();
7152}
7153
7154void APIENTRY glCopyTexImage1D(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border)
7155{
7156 UNIMPLEMENTED();
7157}
7158
7159void APIENTRY glCopyTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width)
7160{
7161 UNIMPLEMENTED();
7162}
7163
7164void APIENTRY glDebugEntry()
7165{
7166 UNIMPLEMENTED();
7167}
7168
7169void APIENTRY glDeleteLists(GLuint list, GLsizei range)
7170{
7171 TRACE("(GLuint list = %d, GLsizei range = %d)", list, range);
7172
7173 if(range < 0)
7174 {
7175 return error(GL_INVALID_VALUE);
7176 }
7177
7178 gl::Context *context = gl::getContext();
7179
7180 if(context)
7181 {
Alexis Hetuf7be67f2015-02-11 16:11:07 -05007182 for(GLuint i = list; i < list + range; i++)
Nicolas Capensa9b49372015-01-30 00:33:26 -05007183 {
7184 context->deleteList(i);
7185 }
7186 }
7187}
7188
7189void APIENTRY glDepthRange(GLclampd zNear, GLclampd zFar)
7190{
7191 UNIMPLEMENTED();
7192}
7193
7194void APIENTRY glDisableClientState(GLenum array)
7195{
7196 TRACE("(GLenum array = 0x%X)", array);
Maxime Grégoire20942c02015-07-16 14:12:47 -04007197
Nicolas Capensa9b49372015-01-30 00:33:26 -05007198 gl::Context *context = gl::getContext();
7199
7200 if(context)
7201 {
7202 GLenum texture = context->getClientActiveTexture();
7203
7204 switch(array)
7205 {
7206 case GL_VERTEX_ARRAY: context->setEnableVertexAttribArray(sw::Position, false); break;
7207 case GL_COLOR_ARRAY: context->setEnableVertexAttribArray(sw::Color0, false); break;
7208 case GL_TEXTURE_COORD_ARRAY: context->setEnableVertexAttribArray(sw::TexCoord0 + (texture - GL_TEXTURE0), false); break;
7209 case GL_NORMAL_ARRAY: context->setEnableVertexAttribArray(sw::Normal, false); break;
7210 default: UNIMPLEMENTED();
7211 }
7212 }
7213}
7214
7215void APIENTRY glDrawBuffer(GLenum mode)
7216{
7217 UNIMPLEMENTED();
7218}
7219
7220void APIENTRY glDrawPixels(GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels)
7221{
7222 UNIMPLEMENTED();
7223}
7224
7225void APIENTRY glEdgeFlag(GLboolean flag)
7226{
7227 UNIMPLEMENTED();
7228}
7229
7230void APIENTRY glEdgeFlagPointer(GLsizei stride, const GLvoid *pointer)
7231{
7232 UNIMPLEMENTED();
7233}
7234
7235void APIENTRY glEdgeFlagv(const GLboolean *flag)
7236{
7237 UNIMPLEMENTED();
7238}
7239
7240void APIENTRY glEnableClientState(GLenum array)
7241{
7242 TRACE("(GLenum array = 0x%X)", array);
Maxime Grégoire20942c02015-07-16 14:12:47 -04007243
Nicolas Capensa9b49372015-01-30 00:33:26 -05007244 gl::Context *context = gl::getContext();
7245
7246 if(context)
7247 {
7248 GLenum texture = context->getClientActiveTexture();
7249
7250 switch(array)
7251 {
7252 case GL_VERTEX_ARRAY: context->setEnableVertexAttribArray(sw::Position, true); break;
7253 case GL_COLOR_ARRAY: context->setEnableVertexAttribArray(sw::Color0, true); break;
7254 case GL_TEXTURE_COORD_ARRAY: context->setEnableVertexAttribArray(sw::TexCoord0 + (texture - GL_TEXTURE0), true); break;
7255 case GL_NORMAL_ARRAY: context->setEnableVertexAttribArray(sw::Normal, true); break;
7256 default: UNIMPLEMENTED();
7257 }
7258 }
7259}
7260
7261void APIENTRY glEnd()
7262{
7263 TRACE("()");
Maxime Grégoire20942c02015-07-16 14:12:47 -04007264
Nicolas Capensa9b49372015-01-30 00:33:26 -05007265 gl::Context *context = gl::getContext();
7266
7267 if(context)
7268 {
7269 if(context->getListIndex() != 0)
7270 {
7271 UNIMPLEMENTED();
7272 }
7273
7274 context->end();
7275 }
7276}
7277
7278void APIENTRY glEndList()
7279{
7280 TRACE("()");
Maxime Grégoire20942c02015-07-16 14:12:47 -04007281
Nicolas Capensa9b49372015-01-30 00:33:26 -05007282 gl::Context *context = gl::getContext();
7283
7284 if(context)
7285 {
7286 context->endList();
7287 }
7288}
7289
7290void APIENTRY glEvalCoord1d(GLdouble u)
7291{
7292 UNIMPLEMENTED();
7293}
7294
7295void APIENTRY glEvalCoord1dv(const GLdouble *u)
7296{
7297 UNIMPLEMENTED();
7298}
7299
7300void APIENTRY glEvalCoord1f(GLfloat u)
7301{
7302 UNIMPLEMENTED();
7303}
7304
7305void APIENTRY glEvalCoord1fv(const GLfloat *u)
7306{
7307 UNIMPLEMENTED();
7308}
7309
7310void APIENTRY glEvalCoord2d(GLdouble u, GLdouble v)
7311{
7312 UNIMPLEMENTED();
7313}
7314
7315void APIENTRY glEvalCoord2dv(const GLdouble *u)
7316{
7317 UNIMPLEMENTED();
7318}
7319
7320void APIENTRY glEvalCoord2f(GLfloat u, GLfloat v)
7321{
7322 UNIMPLEMENTED();
7323}
7324
7325void APIENTRY glEvalCoord2fv(const GLfloat *u)
7326{
7327 UNIMPLEMENTED();
7328}
7329
7330void APIENTRY glEvalMesh1(GLenum mode, GLint i1, GLint i2)
7331{
7332 UNIMPLEMENTED();
7333}
7334
7335void APIENTRY glEvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2)
7336{
7337 UNIMPLEMENTED();
7338}
7339
7340void APIENTRY glEvalPoint1(GLint i)
7341{
7342 UNIMPLEMENTED();
7343}
7344
7345void APIENTRY glEvalPoint2(GLint i, GLint j)
7346{
7347 UNIMPLEMENTED();
7348}
7349
7350void APIENTRY glFeedbackBuffer(GLsizei size, GLenum type, GLfloat *buffer)
7351{
7352 UNIMPLEMENTED();
7353}
7354
7355void APIENTRY glFogf(GLenum pname, GLfloat param)
7356{
7357 TRACE("(GLenum pname = 0x%X, GLfloat param = %f)", pname, param);
7358
7359 gl::Context *context = gl::getContext();
7360
7361 if(context)
7362 {
7363 if(context->getListIndex() != 0)
7364 {
7365 UNIMPLEMENTED();
7366 }
7367
7368 gl::Device *device = gl::getDevice(); // FIXME
7369
7370 switch(pname)
7371 {
7372 case GL_FOG_START: device->setFogStart(param); break;
7373 case GL_FOG_END: device->setFogEnd(param); break;
7374 default:
7375 UNIMPLEMENTED();
7376 return error(GL_INVALID_ENUM);
7377 }
7378 }
7379}
7380
7381void APIENTRY glFogfv(GLenum pname, const GLfloat *params)
7382{
7383 TRACE("(GLenum pname = 0x%X, const GLfloat *params)", pname);
7384
7385 gl::Context *context = gl::getContext();
7386
7387 if(context)
7388 {
7389 if(context->getListIndex() != 0)
7390 {
7391 UNIMPLEMENTED();
7392 }
7393
7394 switch(pname)
7395 {
7396 case GL_FOG_COLOR:
Maxime Grégoire20942c02015-07-16 14:12:47 -04007397 {
7398 gl::Device *device = gl::getDevice(); // FIXME
7399 device->setFogColor(sw::Color<float>(params[0], params[1], params[2], params[3]));
7400 }
7401 break;
Nicolas Capensa9b49372015-01-30 00:33:26 -05007402 default:
7403 UNIMPLEMENTED();
7404 return error(GL_INVALID_ENUM);
7405 }
7406 }
7407}
7408
7409void APIENTRY glFogi(GLenum pname, GLint param)
7410{
7411 TRACE("(GLenum pname = 0x%X, GLint param = %d)", pname, param);
7412
7413 gl::Context *context = gl::getContext();
7414
7415 if(context)
7416 {
7417 if(context->getListIndex() != 0)
7418 {
7419 UNIMPLEMENTED();
7420 }
7421
7422 switch(pname)
7423 {
7424 case GL_FOG_MODE:
Maxime Grégoire20942c02015-07-16 14:12:47 -04007425 {
7426 gl::Device *device = gl::getDevice(); // FIXME
7427 switch(param)
Nicolas Capensa9b49372015-01-30 00:33:26 -05007428 {
Maxime Grégoire20942c02015-07-16 14:12:47 -04007429 case GL_LINEAR: device->setVertexFogMode(sw::FOG_LINEAR); break;
7430 default:
7431 UNIMPLEMENTED();
7432 return error(GL_INVALID_ENUM);
Nicolas Capensa9b49372015-01-30 00:33:26 -05007433 }
Maxime Grégoire20942c02015-07-16 14:12:47 -04007434 }
7435 break;
Nicolas Capensa9b49372015-01-30 00:33:26 -05007436 default:
7437 UNIMPLEMENTED();
7438 return error(GL_INVALID_ENUM);
7439 }
7440 }
7441}
7442
7443void APIENTRY glFogiv(GLenum pname, const GLint *params)
7444{
7445 UNIMPLEMENTED();
7446}
7447
7448void APIENTRY glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)
7449{
Nicolas Capens74626012015-03-11 21:49:44 -04007450 TRACE("(GLdouble left = %f, GLdouble right = %f, GLdouble bottom = %f, GLdouble top = %f, GLdouble zNear = %f, GLdouble zFar = %f)", left, right, bottom, top, zNear, zFar);
Maxime Gregoirefec81292015-03-04 14:44:36 -05007451
7452 gl::Context *context = gl::getContext();
7453
7454 if(context)
7455 {
7456 if(context->getListIndex() != 0)
7457 {
7458 UNIMPLEMENTED();
7459 }
7460
7461 context->frustum(left, right, bottom, top, zNear, zFar);
7462 }
Nicolas Capensa9b49372015-01-30 00:33:26 -05007463}
7464
7465GLuint APIENTRY glGenLists(GLsizei range)
7466{
7467 TRACE("(GLsizei range = %d)", range);
7468
7469 if(range < 0)
7470 {
7471 return error(GL_INVALID_VALUE, 0);
7472 }
7473
7474 gl::Context *context = gl::getContext();
7475
7476 if(context)
7477 {
7478 return context->genLists(range);
7479 }
7480
7481 return 0;
7482}
7483
7484void APIENTRY glGetClipPlane(GLenum plane, GLdouble *equation)
7485{
7486 UNIMPLEMENTED();
7487}
7488
7489void APIENTRY glGetDoublev(GLenum pname, GLdouble *params)
7490{
7491 UNIMPLEMENTED();
7492}
7493
7494void APIENTRY glGetLightfv(GLenum light, GLenum pname, GLfloat *params)
7495{
7496 UNIMPLEMENTED();
7497}
7498
7499void APIENTRY glGetLightiv(GLenum light, GLenum pname, GLint *params)
7500{
7501 UNIMPLEMENTED();
7502}
7503
7504void APIENTRY glGetMapdv(GLenum target, GLenum query, GLdouble *v)
7505{
7506 UNIMPLEMENTED();
7507}
7508
7509void APIENTRY glGetMapfv(GLenum target, GLenum query, GLfloat *v)
7510{
7511 UNIMPLEMENTED();
7512}
7513
7514void APIENTRY glGetMapiv(GLenum target, GLenum query, GLint *v)
7515{
7516 UNIMPLEMENTED();
7517}
7518
7519void APIENTRY glGetMaterialfv(GLenum face, GLenum pname, GLfloat *params)
7520{
7521 UNIMPLEMENTED();
7522}
7523
7524void APIENTRY glGetMaterialiv(GLenum face, GLenum pname, GLint *params)
7525{
7526 UNIMPLEMENTED();
7527}
7528
7529void APIENTRY glGetPixelMapfv(GLenum map, GLfloat *values)
7530{
7531 UNIMPLEMENTED();
7532}
7533
7534void APIENTRY glGetPixelMapuiv(GLenum map, GLuint *values)
7535{
7536 UNIMPLEMENTED();
7537}
7538
7539void APIENTRY glGetPixelMapusv(GLenum map, GLushort *values)
7540{
7541 UNIMPLEMENTED();
7542}
7543
7544void APIENTRY glGetPointerv(GLenum pname, GLvoid* *params)
7545{
7546 UNIMPLEMENTED();
7547}
7548
7549void APIENTRY glGetPolygonStipple(GLubyte *mask)
7550{
7551 UNIMPLEMENTED();
7552}
7553
7554void APIENTRY glGetTexEnvfv(GLenum target, GLenum pname, GLfloat *params)
7555{
7556 UNIMPLEMENTED();
7557}
7558
7559void APIENTRY glGetTexEnviv(GLenum target, GLenum pname, GLint *params)
7560{
7561 UNIMPLEMENTED();
7562}
7563
7564void APIENTRY glGetTexGendv(GLenum coord, GLenum pname, GLdouble *params)
7565{
7566 UNIMPLEMENTED();
7567}
7568
7569void APIENTRY glGetTexGenfv(GLenum coord, GLenum pname, GLfloat *params)
7570{
7571 UNIMPLEMENTED();
7572}
7573
7574void APIENTRY glGetTexGeniv(GLenum coord, GLenum pname, GLint *params)
7575{
7576 UNIMPLEMENTED();
7577}
7578
7579void APIENTRY glGetTexImage(GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels)
7580{
Nicolas Capens4be33702015-04-28 15:13:30 -07007581 TRACE("(GLenum target = 0x%X, GLint level = %d, GLenum format = 0x%X, GLenum type = 0x%X, GLint *pixels%p)", target, level, format, type, pixels);
Nicolas Capensa9b49372015-01-30 00:33:26 -05007582
7583 gl::Context *context = gl::getContext();
7584
7585 if(context)
7586 {
7587 gl::Texture *texture;
7588
7589 switch(target)
7590 {
7591 case GL_TEXTURE_2D:
7592 texture = context->getTexture2D(target);
7593 break;
7594 case GL_TEXTURE_CUBE_MAP:
7595 texture = context->getTextureCubeMap();
7596 break;
7597 default:
7598 UNIMPLEMENTED();
7599 return error(GL_INVALID_ENUM);
7600 }
7601
7602 if(format == texture->getFormat(target, level) && type == texture->getType(target, level))
7603 {
7604 gl::Image *image = texture->getRenderTarget(target, level);
7605 void *source = image->lock(0, 0, sw::LOCK_READONLY);
7606 memcpy(pixels, source, image->getPitch() * image->getHeight());
7607 image->unlock();
7608 }
Maxime Grégoire20942c02015-07-16 14:12:47 -04007609 else
Nicolas Capensa9b49372015-01-30 00:33:26 -05007610 {
7611 UNIMPLEMENTED();
7612 }
7613 }
7614}
7615
7616void APIENTRY glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, GLfloat *params)
7617{
7618 UNIMPLEMENTED();
7619}
7620
7621void APIENTRY glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint *params)
7622{
Nicolas Capens4be33702015-04-28 15:13:30 -07007623 TRACE("(GLenum target = 0x%X, GLint level = %d, GLenum pname = 0x%X, GLint *params = %p)", target, level, pname, params);
Maxime Grégoire20942c02015-07-16 14:12:47 -04007624
Nicolas Capensa9b49372015-01-30 00:33:26 -05007625 gl::Context *context = gl::getContext();
7626
7627 if(context)
7628 {
7629 gl::Texture *texture;
7630
7631 switch(target)
7632 {
7633 case GL_TEXTURE_2D:
7634 case GL_PROXY_TEXTURE_2D:
7635 texture = context->getTexture2D(target);
7636 break;
7637 case GL_TEXTURE_CUBE_MAP:
7638 texture = context->getTextureCubeMap();
7639 break;
7640 default:
7641 UNIMPLEMENTED();
7642 return error(GL_INVALID_ENUM);
7643 }
7644
7645 switch(pname)
7646 {
7647 case GL_TEXTURE_MAG_FILTER:
7648 *params = texture->getMagFilter();
7649 break;
7650 case GL_TEXTURE_MIN_FILTER:
7651 *params = texture->getMinFilter();
7652 break;
7653 case GL_TEXTURE_WRAP_S:
7654 *params = texture->getWrapS();
7655 break;
7656 case GL_TEXTURE_WRAP_T:
7657 *params = texture->getWrapT();
7658 break;
7659 case GL_TEXTURE_WIDTH:
7660 *params = texture->getWidth(target, level);
7661 break;
7662 case GL_TEXTURE_HEIGHT:
7663 *params = texture->getHeight(target, level);
7664 break;
7665 case GL_TEXTURE_INTERNAL_FORMAT:
Maxime Grégoire20942c02015-07-16 14:12:47 -04007666 *params = texture->getInternalFormat(target, level);
Nicolas Capensa9b49372015-01-30 00:33:26 -05007667 break;
7668 case GL_TEXTURE_BORDER_COLOR:
7669 UNIMPLEMENTED();
7670 break;
7671 case GL_TEXTURE_BORDER:
7672 UNIMPLEMENTED();
7673 break;
7674 case GL_TEXTURE_MAX_ANISOTROPY_EXT:
7675 *params = (GLint)texture->getMaxAnisotropy();
7676 break;
7677 default:
7678 return error(GL_INVALID_ENUM);
7679 }
7680 }
7681}
7682
7683void APIENTRY glIndexMask(GLuint mask)
7684{
7685 UNIMPLEMENTED();
7686}
7687
7688void APIENTRY glIndexPointer(GLenum type, GLsizei stride, const GLvoid *pointer)
7689{
7690 UNIMPLEMENTED();
7691}
7692
7693void APIENTRY glIndexd(GLdouble c)
7694{
7695 UNIMPLEMENTED();
7696}
7697
7698void APIENTRY glIndexdv(const GLdouble *c)
7699{
7700 UNIMPLEMENTED();
7701}
7702
7703void APIENTRY glIndexf(GLfloat c)
7704{
7705 UNIMPLEMENTED();
7706}
7707
7708void APIENTRY glIndexfv(const GLfloat *c)
7709{
7710 UNIMPLEMENTED();
7711}
7712
7713void APIENTRY glIndexi(GLint c)
7714{
7715 UNIMPLEMENTED();
7716}
7717
7718void APIENTRY glIndexiv(const GLint *c)
7719{
7720 UNIMPLEMENTED();
7721}
7722
7723void APIENTRY glIndexs(GLshort c)
7724{
7725 UNIMPLEMENTED();
7726}
7727
7728void APIENTRY glIndexsv(const GLshort *c)
7729{
7730 UNIMPLEMENTED();
7731}
7732
7733void APIENTRY glIndexub(GLubyte c)
7734{
7735 UNIMPLEMENTED();
7736}
7737
7738void APIENTRY glIndexubv(const GLubyte *c)
7739{
7740 UNIMPLEMENTED();
7741}
7742
7743void APIENTRY glInitNames(void)
7744{
7745 UNIMPLEMENTED();
7746}
7747
7748void APIENTRY glInterleavedArrays(GLenum format, GLsizei stride, const GLvoid *pointer)
7749{
7750 UNIMPLEMENTED();
7751}
7752
7753GLboolean APIENTRY glIsList(GLuint list)
7754{
7755 UNIMPLEMENTED();
7756 return GL_FALSE;
7757}
7758
7759void APIENTRY glLightModelf(GLenum pname, GLfloat param)
7760{
7761 UNIMPLEMENTED();
7762}
7763
7764void APIENTRY glLightModelfv(GLenum pname, const GLfloat *params)
7765{
7766 TRACE("(GLenum pname = 0x%X, const GLint *params)", pname);
Maxime Grégoire20942c02015-07-16 14:12:47 -04007767
Nicolas Capensa9b49372015-01-30 00:33:26 -05007768 gl::Context *context = gl::getContext();
7769
7770 if(context)
7771 {
7772 if(context->getListIndex() != 0)
7773 {
7774 UNIMPLEMENTED();
7775 }
7776
7777 gl::Device *device = gl::getDevice(); // FIXME
7778
7779 switch(pname)
7780 {
7781 case GL_LIGHT_MODEL_AMBIENT:
7782 device->setGlobalAmbient(sw::Color<float>(params[0], params[1], params[2], params[3]));
7783 break;
7784 default:
7785 UNIMPLEMENTED();
7786 return error(GL_INVALID_ENUM);
7787 }
7788 }
7789}
7790
7791void APIENTRY glLightModeli(GLenum pname, GLint param)
7792{
7793 UNIMPLEMENTED();
7794}
7795
7796void APIENTRY glLightModeliv(GLenum pname, const GLint *params)
7797{
7798 TRACE("(GLenum pname = 0x%X, const GLint *params)", pname);
7799 UNIMPLEMENTED();
7800}
7801
7802void APIENTRY glLightf(GLenum light, GLenum pname, GLfloat param)
7803{
7804 UNIMPLEMENTED();
7805}
7806
7807void APIENTRY glLightfv(GLenum light, GLenum pname, const GLfloat *params)
7808{
7809 TRACE("(GLenum light = 0x%X, GLenum pname = 0x%X, const GLint *params)", light, pname);
Maxime Grégoire20942c02015-07-16 14:12:47 -04007810
Nicolas Capensa9b49372015-01-30 00:33:26 -05007811 gl::Context *context = gl::getContext();
7812
7813 if(context)
7814 {
7815 if(context->getListIndex() != 0)
7816 {
7817 UNIMPLEMENTED();
7818 }
7819
7820 gl::Device *device = gl::getDevice(); // FIXME
7821
7822 switch(pname)
7823 {
7824 case GL_AMBIENT: device->setLightAmbient(light - GL_LIGHT0, sw::Color<float>(params[0], params[1], params[2], params[3])); break;
7825 case GL_DIFFUSE: device->setLightDiffuse(light - GL_LIGHT0, sw::Color<float>(params[0], params[1], params[2], params[3])); break;
7826 case GL_SPECULAR: device->setLightSpecular(light - GL_LIGHT0, sw::Color<float>(params[0], params[1], params[2], params[3])); break;
7827 case GL_POSITION:
7828 if(params[3] == 0.0f) // Directional light
7829 {
7830 // Create a very far out point light
7831 float max = std::max(std::max(abs(params[0]), abs(params[1])), abs(params[2]));
7832 device->setLightPosition(light - GL_LIGHT0, sw::Point(params[0] / max * 1e10f, params[1] / max * 1e10f, params[2] / max * 1e10f));
7833 }
7834 else
7835 {
7836 device->setLightPosition(light - GL_LIGHT0, sw::Point(params[0] / params[3], params[1] / params[3], params[2] / params[3]));
7837 }
7838 break;
7839 default:
7840 UNIMPLEMENTED();
7841 return error(GL_INVALID_ENUM);
7842 }
7843 }
7844}
7845
7846void APIENTRY glLighti(GLenum light, GLenum pname, GLint param)
7847{
7848 UNIMPLEMENTED();
7849}
7850
7851void APIENTRY glLightiv(GLenum light, GLenum pname, const GLint *params)
7852{
7853 UNIMPLEMENTED();
7854}
7855
7856void APIENTRY glLineStipple(GLint factor, GLushort pattern)
7857{
7858 UNIMPLEMENTED();
7859}
7860
7861void APIENTRY glListBase(GLuint base)
7862{
7863 UNIMPLEMENTED();
7864}
7865
7866void APIENTRY glLoadIdentity()
7867{
7868 TRACE("()");
7869
7870 gl::Context *context = gl::getContext();
7871
7872 if(context)
7873 {
7874 if(context->getListIndex() != 0)
7875 {
7876 UNIMPLEMENTED();
7877 }
7878
7879 context->loadIdentity();
7880 }
7881}
7882
7883void APIENTRY glLoadMatrixd(const GLdouble *m)
7884{
7885 UNIMPLEMENTED();
7886}
7887
7888void APIENTRY glLoadMatrixf(const GLfloat *m)
7889{
7890 UNIMPLEMENTED();
7891}
7892
7893void APIENTRY glLoadName(GLuint name)
7894{
7895 UNIMPLEMENTED();
7896}
7897
7898void APIENTRY glLogicOp(GLenum opcode)
7899{
7900 UNIMPLEMENTED();
7901}
7902
7903void APIENTRY glMap1d(GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points)
7904{
7905 UNIMPLEMENTED();
7906}
7907
7908void APIENTRY glMap1f(GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points)
7909{
7910 UNIMPLEMENTED();
7911}
7912
7913void APIENTRY glMap2d(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points)
7914{
7915 UNIMPLEMENTED();
7916}
7917
7918void APIENTRY glMap2f(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points)
7919{
7920 UNIMPLEMENTED();
7921}
7922
7923void APIENTRY glMapGrid1d(GLint un, GLdouble u1, GLdouble u2)
7924{
7925 UNIMPLEMENTED();
7926}
7927
7928void APIENTRY glMapGrid1f(GLint un, GLfloat u1, GLfloat u2)
7929{
7930 UNIMPLEMENTED();
7931}
7932
7933void APIENTRY glMapGrid2d(GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2)
7934{
7935 UNIMPLEMENTED();
7936}
7937
7938void APIENTRY glMapGrid2f(GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2)
7939{
7940 UNIMPLEMENTED();
7941}
7942
7943void APIENTRY glMaterialf(GLenum face, GLenum pname, GLfloat param)
7944{
7945 UNIMPLEMENTED();
7946}
7947
7948void APIENTRY glMaterialfv(GLenum face, GLenum pname, const GLfloat *params)
7949{
7950 UNIMPLEMENTED();
7951}
7952
7953void APIENTRY glMateriali(GLenum face, GLenum pname, GLint param)
7954{
7955 UNIMPLEMENTED();
7956}
7957
7958void APIENTRY glMaterialiv(GLenum face, GLenum pname, const GLint *params)
7959{
7960 UNIMPLEMENTED();
7961}
7962
7963void APIENTRY glMatrixMode(GLenum mode)
7964{
7965 TRACE("(*)");
7966
7967 gl::Context *context = gl::getContext();
7968
7969 if(context)
7970 {
7971 if(context->getListIndex() != 0)
7972 {
7973 UNIMPLEMENTED();
7974 }
7975
7976 context->setMatrixMode(mode);
7977 }
7978}
7979
7980void APIENTRY glMultMatrixd(const GLdouble *m)
7981{
Maxime Gregoire53ff8d82015-03-04 14:51:58 -05007982 TRACE("(*)");
7983
7984 gl::Context *context = gl::getContext();
7985
7986 if(context)
7987 {
7988 if(context->getListIndex() != 0)
7989 {
7990 UNIMPLEMENTED();
7991 }
7992
7993 context->multiply(m);
7994 }
Nicolas Capensa9b49372015-01-30 00:33:26 -05007995}
7996
7997void APIENTRY glMultMatrixm(sw::Matrix m)
7998{
7999 gl::Context *context = gl::getContext();
8000
8001 if(context)
8002 {
8003 context->multiply((GLfloat*)m.m);
8004 }
8005}
8006
8007void APIENTRY glMultMatrixf(const GLfloat *m)
8008{
8009 TRACE("(*)");
8010
8011 gl::Context *context = gl::getContext();
8012
8013 if(context)
8014 {
8015 if(context->getListIndex() != 0)
8016 {
8017 return context->listCommand(gl::newCommand(glMultMatrixm, sw::Matrix(m)));
8018 }
8019
8020 context->multiply(m);
8021 }
8022}
8023
8024void APIENTRY glNewList(GLuint list, GLenum mode)
8025{
8026 TRACE("(GLuint list = %d, GLenum mode = 0x%X)", list, mode);
8027
8028 if(list == 0)
8029 {
8030 return error(GL_INVALID_VALUE);
8031 }
8032
8033 switch(mode)
8034 {
8035 case GL_COMPILE:
8036 case GL_COMPILE_AND_EXECUTE:
8037 break;
8038 default:
8039 return error(GL_INVALID_ENUM);
8040 }
8041
8042 gl::Context *context = gl::getContext();
8043
8044 if(context)
8045 {
8046 if(context->getListIndex() != 0)
8047 {
8048 UNIMPLEMENTED();
8049 }
8050
8051 context->newList(list, mode);
8052 }
8053}
8054
8055void APIENTRY glNormal3b(GLbyte nx, GLbyte ny, GLbyte nz)
8056{
8057 UNIMPLEMENTED();
8058}
8059
8060void APIENTRY glNormal3bv(const GLbyte *v)
8061{
8062 UNIMPLEMENTED();
8063}
8064
8065void APIENTRY glNormal3d(GLdouble nx, GLdouble ny, GLdouble nz)
8066{
8067 UNIMPLEMENTED();
8068}
8069
8070void APIENTRY glNormal3dv(const GLdouble *v)
8071{
8072 UNIMPLEMENTED();
8073}
8074
8075void APIENTRY glNormal3f(GLfloat nx, GLfloat ny, GLfloat nz)
8076{
8077 TRACE("(GLfloat nx = %f, GLfloat ny = %f, GLfloat nz = %f)", nx, ny, nz);
Maxime Grégoire20942c02015-07-16 14:12:47 -04008078
Nicolas Capensa9b49372015-01-30 00:33:26 -05008079 gl::Context *context = gl::getContext();
8080
8081 if(context)
8082 {
8083 if(context->getListIndex() != 0)
8084 {
8085 UNIMPLEMENTED();
8086 }
8087
8088 //context->normal(nx, ny, nz);
8089 context->setVertexAttrib(sw::Normal, nx, ny, nz, 0);
8090 }
8091}
8092
8093void APIENTRY glNormal3fv(const GLfloat *v)
8094{
8095 UNIMPLEMENTED();
8096}
8097
8098void APIENTRY glNormal3i(GLint nx, GLint ny, GLint nz)
8099{
8100 UNIMPLEMENTED();
8101}
8102
8103void APIENTRY glNormal3iv(const GLint *v)
8104{
8105 UNIMPLEMENTED();
8106}
8107
8108void APIENTRY glNormal3s(GLshort nx, GLshort ny, GLshort nz)
8109{
8110 UNIMPLEMENTED();
8111}
8112
8113void APIENTRY glNormal3sv(const GLshort *v)
8114{
8115 UNIMPLEMENTED();
8116}
8117
8118void APIENTRY glNormalPointer(GLenum type, GLsizei stride, const GLvoid *pointer)
8119{
8120 TRACE("(*)");
8121
Nicolas Capensa3fac8b2015-05-25 15:57:03 -04008122 glVertexAttribPointer(sw::Normal, 3, type, true, stride, pointer);
Nicolas Capensa9b49372015-01-30 00:33:26 -05008123}
8124
8125void APIENTRY glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)
8126{
8127 TRACE("(*)");
8128
8129 gl::Context *context = gl::getContext();
8130
8131 if(context)
8132 {
8133 if(context->getListIndex() != 0)
8134 {
8135 UNIMPLEMENTED();
8136 }
8137
8138 context->ortho(left, right, bottom, top, zNear, zFar);
8139 }
8140}
8141
8142void APIENTRY glPassThrough(GLfloat token)
8143{
8144 UNIMPLEMENTED();
8145}
8146
8147void APIENTRY glPixelMapfv(GLenum map, GLsizei mapsize, const GLfloat *values)
8148{
8149 UNIMPLEMENTED();
8150}
8151
8152void APIENTRY glPixelMapuiv(GLenum map, GLsizei mapsize, const GLuint *values)
8153{
8154 UNIMPLEMENTED();
8155}
8156
8157void APIENTRY glPixelMapusv(GLenum map, GLsizei mapsize, const GLushort *values)
8158{
8159 UNIMPLEMENTED();
8160}
8161
8162void APIENTRY glPixelStoref(GLenum pname, GLfloat param)
8163{
8164 UNIMPLEMENTED();
8165}
8166
8167void APIENTRY glPixelTransferf(GLenum pname, GLfloat param)
8168{
8169 UNIMPLEMENTED();
8170}
8171
8172void APIENTRY glPixelTransferi(GLenum pname, GLint param)
8173{
8174 UNIMPLEMENTED();
8175}
8176
8177void APIENTRY glPixelZoom(GLfloat xfactor, GLfloat yfactor)
8178{
8179 UNIMPLEMENTED();
8180}
8181
8182void APIENTRY glPointSize(GLfloat size)
8183{
8184 UNIMPLEMENTED();
8185}
8186
8187void APIENTRY glPolygonMode(GLenum face, GLenum mode)
8188{
8189 UNIMPLEMENTED();
8190}
8191
8192void APIENTRY glPolygonStipple(const GLubyte *mask)
8193{
8194 UNIMPLEMENTED();
8195}
8196
8197void APIENTRY glPopAttrib(void)
8198{
Maxime Grégoire20942c02015-07-16 14:12:47 -04008199 TRACE("()");
Nicolas Capensa9b49372015-01-30 00:33:26 -05008200 UNIMPLEMENTED();
8201}
8202
8203void APIENTRY glPopClientAttrib(void)
8204{
Maxime Grégoire20942c02015-07-16 14:12:47 -04008205 TRACE("()");
Nicolas Capensa9b49372015-01-30 00:33:26 -05008206}
8207
8208void APIENTRY glPopMatrix(void)
8209{
8210 TRACE("()");
Maxime Grégoire20942c02015-07-16 14:12:47 -04008211
Nicolas Capensa9b49372015-01-30 00:33:26 -05008212 gl::Context *context = gl::getContext();
8213
8214 if(context)
8215 {
8216 if(context->getListIndex() != 0)
8217 {
8218 return context->listCommand(gl::newCommand(glPopMatrix));
8219 }
8220
8221 context->popMatrix();
8222 }
8223}
8224
8225void APIENTRY glPopName(void)
8226{
8227 UNIMPLEMENTED();
8228}
8229
8230void APIENTRY glPrioritizeTextures(GLsizei n, const GLuint *textures, const GLclampf *priorities)
8231{
8232 UNIMPLEMENTED();
8233}
8234
8235void APIENTRY glPushAttrib(GLbitfield mask)
8236{
Maxime Grégoire20942c02015-07-16 14:12:47 -04008237 TRACE("(GLbitfield mask = %u)", mask);
8238 //UNIMPLEMENTED();
Nicolas Capensa9b49372015-01-30 00:33:26 -05008239}
8240
8241void APIENTRY glPushClientAttrib(GLbitfield mask)
8242{
Maxime Grégoire20942c02015-07-16 14:12:47 -04008243 TRACE("(GLbitfield mask = %u)", mask);
Nicolas Capensa9b49372015-01-30 00:33:26 -05008244}
8245
8246void APIENTRY glPushMatrix(void)
8247{
8248 TRACE("()");
Maxime Grégoire20942c02015-07-16 14:12:47 -04008249
Nicolas Capensa9b49372015-01-30 00:33:26 -05008250 gl::Context *context = gl::getContext();
8251
8252 if(context)
8253 {
8254 if(context->getListIndex() != 0)
8255 {
8256 return context->listCommand(gl::newCommand(glPushMatrix));
8257 }
8258
8259 context->pushMatrix();
8260 }
8261}
8262
8263void APIENTRY glPushName(GLuint name)
8264{
8265 UNIMPLEMENTED();
8266}
8267
8268void APIENTRY glRasterPos2d(GLdouble x, GLdouble y)
8269{
8270 UNIMPLEMENTED();
8271}
8272
8273void APIENTRY glRasterPos2dv(const GLdouble *v)
8274{
8275 UNIMPLEMENTED();
8276}
8277
8278void APIENTRY glRasterPos2f(GLfloat x, GLfloat y)
8279{
8280 UNIMPLEMENTED();
8281}
8282
8283void APIENTRY glRasterPos2fv(const GLfloat *v)
8284{
8285 UNIMPLEMENTED();
8286}
8287
8288void APIENTRY glRasterPos2i(GLint x, GLint y)
8289{
8290 UNIMPLEMENTED();
8291}
8292
8293void APIENTRY glRasterPos2iv(const GLint *v)
8294{
8295 UNIMPLEMENTED();
8296}
8297
8298void APIENTRY glRasterPos2s(GLshort x, GLshort y)
8299{
8300 UNIMPLEMENTED();
8301}
8302
8303void APIENTRY glRasterPos2sv(const GLshort *v)
8304{
8305 UNIMPLEMENTED();
8306}
8307
8308void APIENTRY glRasterPos3d(GLdouble x, GLdouble y, GLdouble z)
8309{
8310 UNIMPLEMENTED();
8311}
8312
8313void APIENTRY glRasterPos3dv(const GLdouble *v)
8314{
8315 UNIMPLEMENTED();
8316}
8317
8318void APIENTRY glRasterPos3f(GLfloat x, GLfloat y, GLfloat z)
8319{
8320 UNIMPLEMENTED();
8321}
8322
8323void APIENTRY glRasterPos3fv(const GLfloat *v)
8324{
8325 UNIMPLEMENTED();
8326}
8327
8328void APIENTRY glRasterPos3i(GLint x, GLint y, GLint z)
8329{
8330 UNIMPLEMENTED();
8331}
8332
8333void APIENTRY glRasterPos3iv(const GLint *v)
8334{
8335 UNIMPLEMENTED();
8336}
8337
8338void APIENTRY glRasterPos3s(GLshort x, GLshort y, GLshort z)
8339{
8340 UNIMPLEMENTED();
8341}
8342
8343void APIENTRY glRasterPos3sv(const GLshort *v)
8344{
8345 UNIMPLEMENTED();
8346}
8347
8348void APIENTRY glRasterPos4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
8349{
8350 UNIMPLEMENTED();
8351}
8352
8353void APIENTRY glRasterPos4dv(const GLdouble *v)
8354{
8355 UNIMPLEMENTED();
8356}
8357
8358void APIENTRY glRasterPos4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
8359{
8360 UNIMPLEMENTED();
8361}
8362
8363void APIENTRY glRasterPos4fv(const GLfloat *v)
8364{
8365 UNIMPLEMENTED();
8366}
8367
8368void APIENTRY glRasterPos4i(GLint x, GLint y, GLint z, GLint w)
8369{
8370 UNIMPLEMENTED();
8371}
8372
8373void APIENTRY glRasterPos4iv(const GLint *v)
8374{
8375 UNIMPLEMENTED();
8376}
8377
8378void APIENTRY glRasterPos4s(GLshort x, GLshort y, GLshort z, GLshort w)
8379{
8380 UNIMPLEMENTED();
8381}
8382
8383void APIENTRY glRasterPos4sv(const GLshort *v)
8384{
8385 UNIMPLEMENTED();
8386}
8387
8388void APIENTRY glReadBuffer(GLenum mode)
8389{
8390 UNIMPLEMENTED();
8391}
8392
8393void APIENTRY glRectd(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2)
8394{
8395 UNIMPLEMENTED();
8396}
8397
8398void APIENTRY glRectdv(const GLdouble *v1, const GLdouble *v2)
8399{
8400 UNIMPLEMENTED();
8401}
8402
8403void APIENTRY glRectf(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2)
8404{
8405 UNIMPLEMENTED();
8406}
8407
8408void APIENTRY glRectfv(const GLfloat *v1, const GLfloat *v2)
8409{
8410 UNIMPLEMENTED();
8411}
8412
8413void APIENTRY glRecti(GLint x1, GLint y1, GLint x2, GLint y2)
8414{
8415 UNIMPLEMENTED();
8416}
8417
8418void APIENTRY glRectiv(const GLint *v1, const GLint *v2)
8419{
8420 UNIMPLEMENTED();
8421}
8422
8423void APIENTRY glRects(GLshort x1, GLshort y1, GLshort x2, GLshort y2)
8424{
8425 UNIMPLEMENTED();
8426}
8427
8428void APIENTRY glRectsv(const GLshort *v1, const GLshort *v2)
8429{
8430 UNIMPLEMENTED();
8431}
8432
8433GLint APIENTRY glRenderMode(GLenum mode)
8434{
8435 UNIMPLEMENTED();
8436 return 0;
8437}
8438
8439void APIENTRY glRotated(GLdouble angle, GLdouble x, GLdouble y, GLdouble z)
8440{
8441 UNIMPLEMENTED();
8442}
8443
8444void APIENTRY glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z)
8445{
8446 TRACE("(*)");
Maxime Grégoire20942c02015-07-16 14:12:47 -04008447
Nicolas Capensa9b49372015-01-30 00:33:26 -05008448 gl::Context *context = gl::getContext();
8449
8450 if(context)
8451 {
8452 if(context->getListIndex() != 0)
8453 {
8454 UNIMPLEMENTED();
8455 }
8456
8457 context->rotate(angle, x, y, z);
8458 }
8459}
8460
8461void APIENTRY glScaled(GLdouble x, GLdouble y, GLdouble z)
8462{
8463 UNIMPLEMENTED();
8464}
8465
8466void APIENTRY glScalef(GLfloat x, GLfloat y, GLfloat z)
8467{
8468 TRACE("(GLfloat x = %f, GLfloat y = %f, GLfloat z = %f)", x, y, z);
Maxime Grégoire20942c02015-07-16 14:12:47 -04008469
Nicolas Capensa9b49372015-01-30 00:33:26 -05008470 gl::Context *context = gl::getContext();
8471
8472 if(context)
8473 {
8474 if(context->getListIndex() != 0)
8475 {
8476 return context->listCommand(gl::newCommand(glScalef, x, y, z));
8477 }
8478
8479 context->scale(x, y, z);
8480 }
8481}
8482
8483void APIENTRY glSelectBuffer(GLsizei size, GLuint *buffer)
8484{
8485 UNIMPLEMENTED();
8486}
8487
8488void APIENTRY glShadeModel(GLenum mode)
8489{
8490 TRACE("(*)");
Maxime Grégoire20942c02015-07-16 14:12:47 -04008491
Nicolas Capensa9b49372015-01-30 00:33:26 -05008492 gl::Context *context = gl::getContext();
8493
8494 if(context)
8495 {
8496 if(context->getListIndex() != 0)
8497 {
8498 UNIMPLEMENTED();
8499 }
8500
8501 context->setShadeModel(mode);
8502 }
8503}
8504
8505void APIENTRY glTexCoord1d(GLdouble s)
8506{
8507 UNIMPLEMENTED();
8508}
8509
8510void APIENTRY glTexCoord1dv(const GLdouble *v)
8511{
8512 UNIMPLEMENTED();
8513}
8514
8515void APIENTRY glTexCoord1f(GLfloat s)
8516{
8517 UNIMPLEMENTED();
8518}
8519
8520void APIENTRY glTexCoord1fv(const GLfloat *v)
8521{
8522 UNIMPLEMENTED();
8523}
8524
8525void APIENTRY glTexCoord1i(GLint s)
8526{
8527 UNIMPLEMENTED();
8528}
8529
8530void APIENTRY glTexCoord1iv(const GLint *v)
8531{
8532 UNIMPLEMENTED();
8533}
8534
8535void APIENTRY glTexCoord1s(GLshort s)
8536{
8537 UNIMPLEMENTED();
8538}
8539
8540void APIENTRY glTexCoord1sv(const GLshort *v)
8541{
8542 UNIMPLEMENTED();
8543}
8544
8545void APIENTRY glTexCoord2d(GLdouble s, GLdouble t)
8546{
8547 UNIMPLEMENTED();
8548}
8549
8550void APIENTRY glTexCoord2dv(const GLdouble *v)
8551{
8552 UNIMPLEMENTED();
8553}
8554
8555void APIENTRY glTexCoord2f(GLfloat s, GLfloat t)
8556{
8557 TRACE("(GLfloat s = %f, GLfloat t = %f)", s, t);
Maxime Grégoire20942c02015-07-16 14:12:47 -04008558
Nicolas Capensa9b49372015-01-30 00:33:26 -05008559 gl::Context *context = gl::getContext();
8560
8561 if(context)
8562 {
8563 if(context->getListIndex() != 0)
8564 {
8565 UNIMPLEMENTED();
8566 }
8567
8568 //context->texCoord(s, t, 0.0f, 1.0f);
8569 unsigned int texture = context->getActiveTexture();
8570 context->setVertexAttrib(sw::TexCoord0/* + texture*/, s, t, 0.0f, 1.0f);
8571 }
8572}
8573
8574void APIENTRY glTexCoord2fv(const GLfloat *v)
8575{
8576 UNIMPLEMENTED();
8577}
8578
8579void APIENTRY glTexCoord2i(GLint s, GLint t)
8580{
8581 UNIMPLEMENTED();
8582}
8583
8584void APIENTRY glTexCoord2iv(const GLint *v)
8585{
8586 UNIMPLEMENTED();
8587}
8588
8589void APIENTRY glTexCoord2s(GLshort s, GLshort t)
8590{
8591 UNIMPLEMENTED();
8592}
8593
8594void APIENTRY glTexCoord2sv(const GLshort *v)
8595{
8596 UNIMPLEMENTED();
8597}
8598
8599void APIENTRY glTexCoord3d(GLdouble s, GLdouble t, GLdouble r)
8600{
8601 UNIMPLEMENTED();
8602}
8603
8604void APIENTRY glTexCoord3dv(const GLdouble *v)
8605{
8606 UNIMPLEMENTED();
8607}
8608
8609void APIENTRY glTexCoord3f(GLfloat s, GLfloat t, GLfloat r)
8610{
8611 UNIMPLEMENTED();
8612}
8613
8614void APIENTRY glTexCoord3fv(const GLfloat *v)
8615{
8616 UNIMPLEMENTED();
8617}
8618
8619void APIENTRY glTexCoord3i(GLint s, GLint t, GLint r)
8620{
8621 UNIMPLEMENTED();
8622}
8623
8624void APIENTRY glTexCoord3iv(const GLint *v)
8625{
8626 UNIMPLEMENTED();
8627}
8628
8629void APIENTRY glTexCoord3s(GLshort s, GLshort t, GLshort r)
8630{
8631 UNIMPLEMENTED();
8632}
8633
8634void APIENTRY glTexCoord3sv(const GLshort *v)
8635{
8636 UNIMPLEMENTED();
8637}
8638
8639void APIENTRY glTexCoord4d(GLdouble s, GLdouble t, GLdouble r, GLdouble q)
8640{
8641 UNIMPLEMENTED();
8642}
8643
8644void APIENTRY glTexCoord4dv(const GLdouble *v)
8645{
8646 UNIMPLEMENTED();
8647}
8648
8649void APIENTRY glTexCoord4f(GLfloat s, GLfloat t, GLfloat r, GLfloat q)
8650{
8651 UNIMPLEMENTED();
8652}
8653
8654void APIENTRY glTexCoord4fv(const GLfloat *v)
8655{
8656 UNIMPLEMENTED();
8657}
8658
8659void APIENTRY glTexCoord4i(GLint s, GLint t, GLint r, GLint q)
8660{
8661 UNIMPLEMENTED();
8662}
8663
8664void APIENTRY glTexCoord4iv(const GLint *v)
8665{
8666 UNIMPLEMENTED();
8667}
8668
8669void APIENTRY glTexCoord4s(GLshort s, GLshort t, GLshort r, GLshort q)
8670{
8671 UNIMPLEMENTED();
8672}
8673
8674void APIENTRY glTexCoord4sv(const GLshort *v)
8675{
8676 UNIMPLEMENTED();
8677}
8678
8679void APIENTRY glTexCoordPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)
8680{
8681 TRACE("(*)");
8682
8683 gl::Context *context = gl::getContext();
8684
8685 if(context)
8686 {
8687 GLenum texture = context->getClientActiveTexture();
8688
8689 glVertexAttribPointer(sw::TexCoord0 + (texture - GL_TEXTURE0), size, type, false, stride, pointer);
8690 }
8691}
8692
8693void APIENTRY glTexEnvf(GLenum target, GLenum pname, GLfloat param)
8694{
8695 UNIMPLEMENTED();
8696}
8697
8698void APIENTRY glTexEnvfv(GLenum target, GLenum pname, const GLfloat *params)
8699{
8700 UNIMPLEMENTED();
8701}
8702
8703void APIENTRY glTexEnvi(GLenum target, GLenum pname, GLint param)
8704{
Maxime Grégoire20942c02015-07-16 14:12:47 -04008705 TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint param = %d)", target, pname, param);
8706
8707 if(target != GL_TEXTURE_ENV || pname != GL_TEXTURE_ENV_MODE)
8708 {
8709 return error(GL_INVALID_ENUM);
8710 }
8711
8712 switch((GLenum)param)
8713 {
8714 case GL_REPLACE:
8715 case GL_MODULATE:
8716 case GL_DECAL:
8717 case GL_BLEND:
8718 break;
8719 default:
8720 error(GL_INVALID_ENUM);
8721 }
8722
8723 gl::Context *context = gl::getContext();
Nicolas Capensa9b49372015-01-30 00:33:26 -05008724}
8725
8726void APIENTRY glTexEnviv(GLenum target, GLenum pname, const GLint *params)
8727{
8728 UNIMPLEMENTED();
8729}
8730
8731void APIENTRY glTexGend(GLenum coord, GLenum pname, GLdouble param)
8732{
8733 UNIMPLEMENTED();
8734}
8735
8736void APIENTRY glTexGendv(GLenum coord, GLenum pname, const GLdouble *params)
8737{
8738 UNIMPLEMENTED();
8739}
8740
8741void APIENTRY glTexGenf(GLenum coord, GLenum pname, GLfloat param)
8742{
8743 UNIMPLEMENTED();
8744}
8745
8746void APIENTRY glTexGenfv(GLenum coord, GLenum pname, const GLfloat *params)
8747{
8748 UNIMPLEMENTED();
8749}
8750
8751void APIENTRY glTexGeni(GLenum coord, GLenum pname, GLint param)
8752{
8753 UNIMPLEMENTED();
8754}
8755
8756void APIENTRY glTexGeniv(GLenum coord, GLenum pname, const GLint *params)
8757{
8758 UNIMPLEMENTED();
8759}
8760
8761void APIENTRY glTexImage1D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels)
8762{
Maxime Grégoire5e582162015-07-16 12:52:57 -04008763 TRACE("(GLenum target = 0x%X, GLint level = %d, GLint internalformat = %d, GLsizei width = %d, "
8764 "GLint border = %d, GLenum format = 0x%X, GLenum type = 0x%X, const GLvoid* pixels = %p)",
8765 target, level, internalformat, width, border, format, type, pixels);
8766
8767 glTexImage2D(target, level, internalformat, width, 1, border, format, type, pixels);
Nicolas Capensa9b49372015-01-30 00:33:26 -05008768}
8769
8770void APIENTRY glTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels)
8771{
Maxime Grégoire5e582162015-07-16 12:52:57 -04008772 TRACE("(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLsizei width = %d, "
8773 "GLenum format = 0x%X, GLenum type = 0x%X, const GLvoid* pixels = %p)",
8774 target, level, xoffset, width, format, type, pixels);
8775
8776 glTexSubImage2D(target, level, xoffset, 0, width, 1, format, type, pixels);
Nicolas Capensa9b49372015-01-30 00:33:26 -05008777}
8778
8779void APIENTRY glTranslated(GLdouble x, GLdouble y, GLdouble z)
8780{
8781 TRACE("(*)");
Maxime Grégoire20942c02015-07-16 14:12:47 -04008782
Nicolas Capensa9b49372015-01-30 00:33:26 -05008783 gl::Context *context = gl::getContext();
8784
8785 if(context)
8786 {
8787 if(context->getListIndex() != 0)
8788 {
8789 return context->listCommand(gl::newCommand(glTranslated, x, y, z));
8790 }
8791
8792 context->translate(x, y, z); // FIXME
8793 }
8794}
8795
8796void APIENTRY glTranslatef(GLfloat x, GLfloat y, GLfloat z)
8797{
8798 TRACE("(GLfloat x = %f, GLfloat y = %f, GLfloat z = %f)", x, y, z);
Maxime Grégoire20942c02015-07-16 14:12:47 -04008799
Nicolas Capensa9b49372015-01-30 00:33:26 -05008800 gl::Context *context = gl::getContext();
8801
8802 if(context)
8803 {
8804 if(context->getListIndex() != 0)
8805 {
8806 return context->listCommand(gl::newCommand(glTranslatef, x, y, z));
8807 }
8808
8809 context->translate(x, y, z);
8810 }
8811}
8812
8813void APIENTRY glVertex2d(GLdouble x, GLdouble y)
8814{
8815 UNIMPLEMENTED();
8816}
8817
8818void APIENTRY glVertex2dv(const GLdouble *v)
8819{
8820 UNIMPLEMENTED();
8821}
8822
8823void APIENTRY glVertex2f(GLfloat x, GLfloat y)
8824{
8825 UNIMPLEMENTED();
8826}
8827
8828void APIENTRY glVertex2fv(const GLfloat *v)
8829{
8830 UNIMPLEMENTED();
8831}
8832
8833void APIENTRY glVertex2i(GLint x, GLint y)
8834{
8835 UNIMPLEMENTED();
8836}
8837
8838void APIENTRY glVertex2iv(const GLint *v)
8839{
8840 UNIMPLEMENTED();
8841}
8842
8843void APIENTRY glVertex2s(GLshort x, GLshort y)
8844{
8845 UNIMPLEMENTED();
8846}
8847
8848void APIENTRY glVertex2sv(const GLshort *v)
8849{
8850 UNIMPLEMENTED();
8851}
8852
8853void APIENTRY glVertex3d(GLdouble x, GLdouble y, GLdouble z)
8854{
8855 UNIMPLEMENTED();
8856}
8857
8858void APIENTRY glVertex3dv(const GLdouble *v)
8859{
8860 UNIMPLEMENTED();
8861}
8862
8863void APIENTRY glVertex3f(GLfloat x, GLfloat y, GLfloat z)
8864{
8865 TRACE("(GLfloat x = %f, GLfloat y = %f, GLfloat z = %f)", x, y, z);
Maxime Grégoire20942c02015-07-16 14:12:47 -04008866
Nicolas Capensa9b49372015-01-30 00:33:26 -05008867 gl::Context *context = gl::getContext();
8868
8869 if(context)
8870 {
8871 if(context->getListIndex() != 0)
8872 {
8873 UNIMPLEMENTED();
8874 }
8875
8876 context->position(x, y, z, 1.0f);
8877 }
8878}
8879
8880void APIENTRY glVertex3fv(const GLfloat *v)
8881{
8882 UNIMPLEMENTED();
8883}
8884
Maxime Grégoire20942c02015-07-16 14:12:47 -04008885GLAPI void APIENTRY glVertexAttrib4dv(GLuint index, const GLdouble *v)
8886{
8887 UNIMPLEMENTED();
8888}
8889
Nicolas Capensa9b49372015-01-30 00:33:26 -05008890void APIENTRY glVertex3i(GLint x, GLint y, GLint z)
8891{
8892 UNIMPLEMENTED();
8893}
8894
8895void APIENTRY glVertex3iv(const GLint *v)
8896{
8897 UNIMPLEMENTED();
8898}
8899
8900void APIENTRY glVertex3s(GLshort x, GLshort y, GLshort z)
8901{
8902 UNIMPLEMENTED();
8903}
8904
8905void APIENTRY glVertex3sv(const GLshort *v)
8906{
8907 UNIMPLEMENTED();
8908}
8909
8910void APIENTRY glVertex4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
8911{
8912 UNIMPLEMENTED();
8913}
8914
8915void APIENTRY glVertex4dv(const GLdouble *v)
8916{
8917 UNIMPLEMENTED();
8918}
8919
8920void APIENTRY glVertex4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
8921{
8922 UNIMPLEMENTED();
8923}
8924
8925void APIENTRY glVertex4fv(const GLfloat *v)
8926{
8927 UNIMPLEMENTED();
8928}
8929
8930void APIENTRY glVertex4i(GLint x, GLint y, GLint z, GLint w)
8931{
8932 UNIMPLEMENTED();
8933}
8934
8935void APIENTRY glVertex4iv(const GLint *v)
8936{
8937 UNIMPLEMENTED();
8938}
8939
8940void APIENTRY glVertex4s(GLshort x, GLshort y, GLshort z, GLshort w)
8941{
8942 UNIMPLEMENTED();
8943}
8944
8945void APIENTRY glVertex4sv(const GLshort *v)
8946{
8947 UNIMPLEMENTED();
8948}
8949
8950void APIENTRY glVertexPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)
8951{
Nicolas Capens4be33702015-04-28 15:13:30 -07008952 TRACE("(GLint size = %d, GLenum type = 0x%X, GLsizei stride = %d, const GLvoid *pointer = %p)", size, type, stride, pointer);
Nicolas Capensa9b49372015-01-30 00:33:26 -05008953
8954 glVertexAttribPointer(sw::Position, size, type, false, stride, pointer);
8955}
8956
Maxime Grégoire20942c02015-07-16 14:12:47 -04008957void APIENTRY glDrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices) { UNIMPLEMENTED(); }
8958void APIENTRY glTexImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels) { UNIMPLEMENTED(); }
8959void APIENTRY glTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels) { UNIMPLEMENTED(); }
8960void APIENTRY glCopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) { UNIMPLEMENTED(); }
Nicolas Capensa9b49372015-01-30 00:33:26 -05008961
8962void APIENTRY glClientActiveTexture(GLenum texture)
8963{
8964 TRACE("(GLenum texture = 0x%X)", texture);
Maxime Grégoire20942c02015-07-16 14:12:47 -04008965
Nicolas Capensa9b49372015-01-30 00:33:26 -05008966 switch(texture)
8967 {
8968 case GL_TEXTURE0:
8969 case GL_TEXTURE1:
8970 break;
8971 default:
8972 UNIMPLEMENTED();
8973 UNREACHABLE();
8974 }
8975
8976 gl::Context *context = gl::getContext();
8977
8978 if(context)
8979 {
8980 context->clientActiveTexture(texture);
8981 }
8982}
8983
Maxime Grégoire20942c02015-07-16 14:12:47 -04008984void APIENTRY glCompressedTexImage1D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data) { UNIMPLEMENTED(); }
8985void APIENTRY glCompressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data) { UNIMPLEMENTED(); }
8986void APIENTRY glCompressedTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data) { UNIMPLEMENTED(); }
8987void APIENTRY glCompressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data) { UNIMPLEMENTED(); }
8988void APIENTRY glGetCompressedTexImage(GLenum target, GLint level, void *img) { UNIMPLEMENTED(); }
8989void APIENTRY glMultiTexCoord1f(GLenum target, GLfloat s) { UNIMPLEMENTED(); }
8990void APIENTRY glMultiTexCoord1d(GLenum target, GLdouble s) { UNIMPLEMENTED(); }
Nicolas Capensa9b49372015-01-30 00:33:26 -05008991
8992void APIENTRY glMultiTexCoord2f(GLenum texture, GLfloat s, GLfloat t)
8993{
8994 TRACE("(GLenum texture = 0x%X, GLfloat s = %f, GLfloat t = %f)", texture, s, t);
Maxime Grégoire20942c02015-07-16 14:12:47 -04008995
Nicolas Capensa9b49372015-01-30 00:33:26 -05008996 gl::Context *context = gl::getContext();
8997
8998 if(context)
8999 {
9000 if(context->getListIndex() != 0)
9001 {
9002 UNIMPLEMENTED();
9003 }
9004
9005 //context->texCoord(s, t, 0.0f, 1.0f);
9006 context->setVertexAttrib(sw::TexCoord0 + (texture - GL_TEXTURE0), s, t, 0.0f, 1.0f);
9007 }
9008}
9009
Maxime Grégoire20942c02015-07-16 14:12:47 -04009010void APIENTRY glMultiTexCoord2d(GLenum target, GLdouble s, GLdouble t) { UNIMPLEMENTED(); }
9011void APIENTRY glMultiTexCoord3f(GLenum target, GLfloat s, GLfloat t, GLfloat r) { UNIMPLEMENTED(); }
9012void APIENTRY glMultiTexCoord3d(GLenum target, GLdouble s, GLdouble t, GLdouble r) { UNIMPLEMENTED(); }
9013void APIENTRY glMultiTexCoord4f(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q) { UNIMPLEMENTED(); }
9014void APIENTRY glMultiTexCoord4d(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q) { UNIMPLEMENTED(); }
9015void APIENTRY glLoadTransposeMatrixf(const GLfloat *m) { UNIMPLEMENTED(); }
9016void APIENTRY glLoadTransposeMatrixd(const GLdouble *m) { UNIMPLEMENTED(); }
9017void APIENTRY glMultTransposeMatrixf(const GLfloat *m) { UNIMPLEMENTED(); }
9018void APIENTRY glMultTransposeMatrixd(const GLdouble *m) { UNIMPLEMENTED(); }
9019void APIENTRY glFogCoordf(GLfloat coord) { UNIMPLEMENTED(); }
9020void APIENTRY glFogCoordd(GLdouble coord) { UNIMPLEMENTED(); }
9021void APIENTRY glFogCoordPointer(GLenum type, GLsizei stride, const void *pointer) { UNIMPLEMENTED(); }
9022void APIENTRY glMultiDrawArrays(GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount) { UNIMPLEMENTED(); }
9023void APIENTRY glPointParameteri(GLenum pname, GLint param) { UNIMPLEMENTED(); }
9024void APIENTRY glPointParameterf(GLenum pname, GLfloat param) { UNIMPLEMENTED(); }
9025void APIENTRY glPointParameteriv(GLenum pname, const GLint *params) { UNIMPLEMENTED(); }
9026void APIENTRY glPointParameterfv(GLenum pname, const GLfloat *params) { UNIMPLEMENTED(); }
9027void APIENTRY glSecondaryColor3b(GLbyte red, GLbyte green, GLbyte blue) { UNIMPLEMENTED(); }
9028void APIENTRY glSecondaryColor3f(GLfloat red, GLfloat green, GLfloat blue) { UNIMPLEMENTED(); }
9029void APIENTRY glSecondaryColor3d(GLdouble red, GLdouble green, GLdouble blue) { UNIMPLEMENTED(); }
9030void APIENTRY glSecondaryColor3ub(GLubyte red, GLubyte green, GLubyte blue) { UNIMPLEMENTED(); }
9031void APIENTRY glSecondaryColorPointer(GLint size, GLenum type, GLsizei stride, const void *pointer) { UNIMPLEMENTED(); }
9032void APIENTRY glWindowPos2f(GLfloat x, GLfloat y) { UNIMPLEMENTED(); }
9033void APIENTRY glWindowPos2d(GLdouble x, GLdouble y) { UNIMPLEMENTED(); }
9034void APIENTRY glWindowPos2i(GLint x, GLint y) { UNIMPLEMENTED(); }
9035void APIENTRY glWindowPos3f(GLfloat x, GLfloat y, GLfloat z) { UNIMPLEMENTED(); }
9036void APIENTRY glWindowPos3d(GLdouble x, GLdouble y, GLdouble z) { UNIMPLEMENTED(); }
9037void APIENTRY glWindowPos3i(GLint x, GLint y, GLint z) { UNIMPLEMENTED(); }
9038void APIENTRY glGetBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, void *data) { UNIMPLEMENTED(); }
9039void *APIENTRY glMapBuffer(GLenum target, GLenum access) { UNIMPLEMENTED(); return 0; }
9040GLboolean APIENTRY glUnmapBuffer(GLenum target) { UNIMPLEMENTED(); return GL_FALSE; }
9041void APIENTRY glGetBufferPointerv(GLenum target, GLenum pname, void **params) { UNIMPLEMENTED(); }
9042void APIENTRY glGenQueries(GLsizei n, GLuint *ids) { UNIMPLEMENTED(); }
9043void APIENTRY glDeleteQueries(GLsizei n, const GLuint *ids) { UNIMPLEMENTED(); }
9044GLboolean APIENTRY glIsQuery(GLuint id) { UNIMPLEMENTED(); return 0; }
9045void APIENTRY glBeginQuery(GLenum target, GLuint id) { UNIMPLEMENTED(); }
9046void APIENTRY glEndQuery(GLenum target) { UNIMPLEMENTED(); }
9047void APIENTRY glGetQueryiv(GLenum target, GLenum pname, GLint *params) { UNIMPLEMENTED(); }
9048void APIENTRY glGetQueryObjectiv(GLuint id, GLenum pname, GLint *params) { UNIMPLEMENTED(); }
9049void APIENTRY glGetQueryObjectuiv(GLuint id, GLenum pname, GLuint *params) { UNIMPLEMENTED(); }
9050void APIENTRY glVertexAttrib1s(GLuint index, GLshort x) { UNIMPLEMENTED(); }
9051void APIENTRY glVertexAttrib1d(GLuint index, GLdouble x) { UNIMPLEMENTED(); }
9052void APIENTRY glVertexAttrib2s(GLuint index, GLshort x, GLshort y) { UNIMPLEMENTED(); }
9053void APIENTRY glVertexAttrib2d(GLuint index, GLdouble x, GLdouble y) { UNIMPLEMENTED(); }
9054void APIENTRY glVertexAttrib3s(GLuint index, GLshort x, GLshort y, GLshort z) { UNIMPLEMENTED(); }
9055void APIENTRY glVertexAttrib3d(GLuint index, GLdouble x, GLdouble y, GLdouble z) { UNIMPLEMENTED(); }
9056void APIENTRY glVertexAttrib4s(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w) { UNIMPLEMENTED(); }
9057void APIENTRY glVertexAttrib4d(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) { UNIMPLEMENTED(); }
9058void APIENTRY glVertexAttrib4Nub(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w) { UNIMPLEMENTED(); }
9059void APIENTRY glGetVertexAttribdv(GLuint index, GLenum pname, GLdouble *params) { UNIMPLEMENTED(); }
9060void APIENTRY glDrawBuffers(GLsizei n, const GLenum *bufs) { UNIMPLEMENTED(); }
9061void APIENTRY glUniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) { UNIMPLEMENTED(); }
9062void APIENTRY glUniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) { UNIMPLEMENTED(); }
9063void APIENTRY glUniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) { UNIMPLEMENTED(); }
9064void APIENTRY glUniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) { UNIMPLEMENTED(); }
9065void APIENTRY glUniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) { UNIMPLEMENTED(); }
9066void APIENTRY glUniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) { UNIMPLEMENTED(); }
Nicolas Capensa9b49372015-01-30 00:33:26 -05009067
Maxime Grégoire20942c02015-07-16 14:12:47 -04009068void APIENTRY glFramebufferTextureLayer(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer) { UNIMPLEMENTED(); }
9069void APIENTRY glRenderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) { UNIMPLEMENTED(); }
9070void APIENTRY glBlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) { UNIMPLEMENTED(); }
9071
9072void WINAPI glBindAttribLocationARB(GLhandleARB programObj, GLuint index, const GLcharARB *name) { UNIMPLEMENTED(); }
9073void WINAPI glGetActiveAttribARB(GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name) { UNIMPLEMENTED(); }
9074GLint WINAPI glGetAttribLocationARB(GLhandleARB programObj, const GLcharARB *name) { UNIMPLEMENTED(); return 0; }
9075GLAPI void APIENTRY glDeleteObjectARB(GLhandleARB obj){ UNIMPLEMENTED(); }
9076GLAPI GLhandleARB APIENTRY glGetHandleARB(GLenum pname){ UNIMPLEMENTED(); return 0; }
9077GLAPI void APIENTRY glDetachObjectARB(GLhandleARB containerObj, GLhandleARB attachedObj){ UNIMPLEMENTED(); }
9078GLAPI GLhandleARB APIENTRY glCreateShaderObjectARB(GLenum shaderType){ UNIMPLEMENTED(); return 0; }
9079GLAPI void APIENTRY glShaderSourceARB(GLhandleARB shaderObj, GLsizei count, const GLcharARB **string, const GLint *length){ UNIMPLEMENTED(); }
9080GLAPI void APIENTRY glCompileShaderARB(GLhandleARB shaderObj){ UNIMPLEMENTED(); }
9081GLAPI GLhandleARB APIENTRY glCreateProgramObjectARB(void){ UNIMPLEMENTED(); return 0; }
9082GLAPI void APIENTRY glAttachObjectARB(GLhandleARB containerObj, GLhandleARB obj){ UNIMPLEMENTED(); }
9083GLAPI void APIENTRY glLinkProgramARB(GLhandleARB programObj){ UNIMPLEMENTED(); }
9084GLAPI void APIENTRY glUseProgramObjectARB(GLhandleARB programObj){ UNIMPLEMENTED(); }
9085GLAPI void APIENTRY glValidateProgramARB(GLhandleARB programObj){ UNIMPLEMENTED(); }
9086GLAPI void APIENTRY glUniform1fARB(GLint location, GLfloat v0){ UNIMPLEMENTED(); }
9087GLAPI void APIENTRY glUniform2fARB(GLint location, GLfloat v0, GLfloat v1){ UNIMPLEMENTED(); }
9088GLAPI void APIENTRY glUniform3fARB(GLint location, GLfloat v0, GLfloat v1, GLfloat v2){ UNIMPLEMENTED(); }
9089GLAPI void APIENTRY glUniform4fARB(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3){ UNIMPLEMENTED(); }
9090GLAPI void APIENTRY glUniform1iARB(GLint location, GLint v0){ UNIMPLEMENTED(); }
9091GLAPI void APIENTRY glUniform2iARB(GLint location, GLint v0, GLint v1){ UNIMPLEMENTED(); }
9092GLAPI void APIENTRY glUniform3iARB(GLint location, GLint v0, GLint v1, GLint v2){ UNIMPLEMENTED(); }
9093GLAPI void APIENTRY glUniform4iARB(GLint location, GLint v0, GLint v1, GLint v2, GLint v3){ UNIMPLEMENTED(); }
9094GLAPI void APIENTRY glUniform1fvARB(GLint location, GLsizei count, const GLfloat *value){ UNIMPLEMENTED(); }
9095GLAPI void APIENTRY glUniform2fvARB(GLint location, GLsizei count, const GLfloat *value){ UNIMPLEMENTED(); }
9096GLAPI void APIENTRY glUniform3fvARB(GLint location, GLsizei count, const GLfloat *value){ UNIMPLEMENTED(); }
9097GLAPI void APIENTRY glUniform4fvARB(GLint location, GLsizei count, const GLfloat *value){ UNIMPLEMENTED(); }
9098GLAPI void APIENTRY glUniform1ivARB(GLint location, GLsizei count, const GLint *value){ UNIMPLEMENTED(); }
9099GLAPI void APIENTRY glUniform2ivARB(GLint location, GLsizei count, const GLint *value){ UNIMPLEMENTED(); }
9100GLAPI void APIENTRY glUniform3ivARB(GLint location, GLsizei count, const GLint *value){ UNIMPLEMENTED(); }
9101GLAPI void APIENTRY glUniform4ivARB(GLint location, GLsizei count, const GLint *value){ UNIMPLEMENTED(); }
9102GLAPI void APIENTRY glUniformMatrix2fvARB(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value){ UNIMPLEMENTED(); }
9103GLAPI void APIENTRY glUniformMatrix3fvARB(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value){ UNIMPLEMENTED(); }
9104GLAPI void APIENTRY glUniformMatrix4fvARB(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value){ UNIMPLEMENTED(); }
9105GLAPI void APIENTRY glGetObjectParameterfvARB(GLhandleARB obj, GLenum pname, GLfloat *params){ UNIMPLEMENTED(); }
9106GLAPI void APIENTRY glGetObjectParameterivARB(GLhandleARB obj, GLenum pname, GLint *params){ UNIMPLEMENTED(); }
9107GLAPI void APIENTRY glGetInfoLogARB(GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog){ UNIMPLEMENTED(); }
9108GLAPI void APIENTRY glGetAttachedObjectsARB(GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj){ UNIMPLEMENTED(); }
9109GLAPI GLint APIENTRY glGetUniformLocationARB(GLhandleARB programObj, const GLcharARB *name){ UNIMPLEMENTED(); return 0; }
9110GLAPI void APIENTRY glGetActiveUniformARB(GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name){ UNIMPLEMENTED(); }
9111GLAPI void APIENTRY glGetUniformfvARB(GLhandleARB programObj, GLint location, GLfloat *params){ UNIMPLEMENTED(); }
9112GLAPI void APIENTRY glGetUniformivARB(GLhandleARB programObj, GLint location, GLint *params){ UNIMPLEMENTED(); }
9113GLAPI void APIENTRY glGetShaderSourceARB(GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source){ UNIMPLEMENTED(); }
9114
9115GLAPI GLboolean APIENTRY glIsRenderbufferEXT(GLuint renderbuffer){ UNIMPLEMENTED(); return 0; }
9116GLAPI void APIENTRY glBindRenderbufferEXT(GLenum target, GLuint renderbuffer){ UNIMPLEMENTED(); }
9117GLAPI void APIENTRY glDeleteRenderbuffersEXT(GLsizei n, const GLuint *renderbuffers){ UNIMPLEMENTED(); }
9118GLAPI void APIENTRY glGenRenderbuffersEXT(GLsizei n, GLuint *renderbuffers){ UNIMPLEMENTED(); }
9119GLAPI void APIENTRY glRenderbufferStorageEXT(GLenum target, GLenum internalformat, GLsizei width, GLsizei height){ UNIMPLEMENTED(); }
9120GLAPI void APIENTRY glGetRenderbufferParameterivEXT(GLenum target, GLenum pname, GLint *params){ UNIMPLEMENTED(); }
9121GLAPI GLboolean APIENTRY glIsFramebufferEXT(GLuint framebuffer){ UNIMPLEMENTED(); return 0; }
9122GLAPI void APIENTRY glBindFramebufferEXT(GLenum target, GLuint framebuffer){ UNIMPLEMENTED(); }
9123GLAPI void APIENTRY glDeleteFramebuffersEXT(GLsizei n, const GLuint *framebuffers)
9124{
9125 TRACE("(GLsizei n = %d, const GLuint* framebuffers = %p)", n, framebuffers);
9126
9127 glDeleteFramebuffers(n, framebuffers);
9128}
9129GLAPI void APIENTRY glGenFramebuffersEXT(GLsizei n, GLuint *framebuffers)
9130{
9131 TRACE("(GLsizei n = %d, GLuint* framebuffers = %p)", n, framebuffers);
9132
9133 glGenFramebuffers(n, framebuffers);
9134}
9135GLAPI GLenum APIENTRY glCheckFramebufferStatusEXT(GLenum target){ UNIMPLEMENTED(); return 0; }
9136GLAPI void APIENTRY glFramebufferTexture1DEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level){ UNIMPLEMENTED(); }
9137GLAPI void APIENTRY glFramebufferTexture2DEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level){ UNIMPLEMENTED(); }
9138GLAPI void APIENTRY glFramebufferTexture3DEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset){ UNIMPLEMENTED(); }
9139GLAPI void APIENTRY glFramebufferRenderbufferEXT(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer){ UNIMPLEMENTED(); }
9140GLAPI void APIENTRY glGetFramebufferAttachmentParameterivEXT(GLenum target, GLenum attachment, GLenum pname, GLint *params){ UNIMPLEMENTED(); }
9141GLAPI void APIENTRY glGenerateMipmapEXT(GLenum target){ UNIMPLEMENTED(); }
9142
9143HGLRC WINAPI wglCreateContextAttribsARB(HDC hDC, HGLRC hShareContext, const int *attribList)
9144{
9145 return wglCreateContext(hDC);
9146}
9147
9148HANDLE WINAPI wglCreateBufferRegionARB(HDC hDC, int iLayerPlane, UINT uType) { UNIMPLEMENTED(); return 0; }
9149VOID WINAPI wglDeleteBufferRegionARB(HANDLE hRegion) { UNIMPLEMENTED(); }
9150BOOL WINAPI wglSaveBufferRegionARB(HANDLE hRegion, int x, int y, int width, int height) { UNIMPLEMENTED(); return FALSE; }
9151BOOL WINAPI wglRestoreBufferRegionARB(HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc) { UNIMPLEMENTED(); return FALSE; }
9152
9153void APIENTRY glColorMaski(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a){ TRACE("*"); UNIMPLEMENTED(); }
9154void APIENTRY glGetBooleani_v(GLenum target, GLuint index, GLboolean *data){ TRACE("*"); UNIMPLEMENTED(); }
9155void APIENTRY glGetIntegeri_v(GLenum target, GLuint index, GLint *data){ TRACE("*"); UNIMPLEMENTED(); }
9156void APIENTRY glEnablei(GLenum target, GLuint index){ TRACE("*"); UNIMPLEMENTED(); }
9157void APIENTRY glDisablei(GLenum target, GLuint index){ TRACE("*"); UNIMPLEMENTED(); }
9158GLboolean APIENTRY glIsEnabledi(GLenum target, GLuint index){ TRACE("*"); UNIMPLEMENTED(); return 0; }
9159void APIENTRY glBeginTransformFeedback(GLenum primitiveMode){ TRACE("*"); UNIMPLEMENTED(); }
9160void APIENTRY glEndTransformFeedback(void){ TRACE("*"); UNIMPLEMENTED(); }
9161void APIENTRY glBindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size){ TRACE("*"); UNIMPLEMENTED(); }
9162void APIENTRY glBindBufferBase(GLenum target, GLuint index, GLuint buffer){ TRACE("*"); UNIMPLEMENTED(); }
9163void APIENTRY glTransformFeedbackVaryings(GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode){ TRACE("*"); UNIMPLEMENTED(); }
9164void APIENTRY glGetTransformFeedbackVarying(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name){ TRACE("*"); UNIMPLEMENTED(); }
9165void APIENTRY glClampColor(GLenum target, GLenum clamp){ TRACE("*"); UNIMPLEMENTED(); }
9166void APIENTRY glBeginConditionalRender(GLuint id, GLenum mode){ TRACE("*"); UNIMPLEMENTED(); }
9167void APIENTRY glEndConditionalRender(void){ TRACE("*"); UNIMPLEMENTED(); }
9168void APIENTRY glVertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer){ TRACE("*"); UNIMPLEMENTED(); }
9169void APIENTRY glGetVertexAttribIiv(GLuint index, GLenum pname, GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9170void APIENTRY glGetVertexAttribIuiv(GLuint index, GLenum pname, GLuint *params){ TRACE("*"); UNIMPLEMENTED(); }
9171void APIENTRY glVertexAttribI1i(GLuint index, GLint x){ TRACE("*"); UNIMPLEMENTED(); }
9172void APIENTRY glVertexAttribI2i(GLuint index, GLint x, GLint y){ TRACE("*"); UNIMPLEMENTED(); }
9173void APIENTRY glVertexAttribI3i(GLuint index, GLint x, GLint y, GLint z){ TRACE("*"); UNIMPLEMENTED(); }
9174void APIENTRY glVertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w){ TRACE("*"); UNIMPLEMENTED(); }
9175void APIENTRY glVertexAttribI1ui(GLuint index, GLuint x){ TRACE("*"); UNIMPLEMENTED(); }
9176void APIENTRY glVertexAttribI2ui(GLuint index, GLuint x, GLuint y){ TRACE("*"); UNIMPLEMENTED(); }
9177void APIENTRY glVertexAttribI3ui(GLuint index, GLuint x, GLuint y, GLuint z){ TRACE("*"); UNIMPLEMENTED(); }
9178void APIENTRY glVertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w){ TRACE("*"); UNIMPLEMENTED(); }
9179void APIENTRY glVertexAttribI1iv(GLuint index, const GLint *v){ TRACE("*"); UNIMPLEMENTED(); }
9180void APIENTRY glVertexAttribI2iv(GLuint index, const GLint *v){ TRACE("*"); UNIMPLEMENTED(); }
9181void APIENTRY glVertexAttribI3iv(GLuint index, const GLint *v){ TRACE("*"); UNIMPLEMENTED(); }
9182void APIENTRY glVertexAttribI4iv(GLuint index, const GLint *v){ TRACE("*"); UNIMPLEMENTED(); }
9183void APIENTRY glVertexAttribI1uiv(GLuint index, const GLuint *v){ TRACE("*"); UNIMPLEMENTED(); }
9184void APIENTRY glVertexAttribI2uiv(GLuint index, const GLuint *v){ TRACE("*"); UNIMPLEMENTED(); }
9185void APIENTRY glVertexAttribI3uiv(GLuint index, const GLuint *v){ TRACE("*"); UNIMPLEMENTED(); }
9186void APIENTRY glVertexAttribI4uiv(GLuint index, const GLuint *v){ TRACE("*"); UNIMPLEMENTED(); }
9187void APIENTRY glVertexAttribI4bv(GLuint index, const GLbyte *v){ TRACE("*"); UNIMPLEMENTED(); }
9188void APIENTRY glVertexAttribI4sv(GLuint index, const GLshort *v){ TRACE("*"); UNIMPLEMENTED(); }
9189void APIENTRY glVertexAttribI4ubv(GLuint index, const GLubyte *v){ TRACE("*"); UNIMPLEMENTED(); }
9190void APIENTRY glVertexAttribI4usv(GLuint index, const GLushort *v){ TRACE("*"); UNIMPLEMENTED(); }
9191void APIENTRY glGetUniformuiv(GLuint program, GLint location, GLuint *params){ TRACE("*"); UNIMPLEMENTED(); }
9192void APIENTRY glBindFragDataLocation(GLuint program, GLuint color, const GLchar *name){ TRACE("*"); UNIMPLEMENTED(); }
9193GLint APIENTRY glGetFragDataLocation(GLuint program, const GLchar *name){ TRACE("*"); UNIMPLEMENTED(); return 0; }
9194void APIENTRY glUniform1ui(GLint location, GLuint v0){ TRACE("*"); UNIMPLEMENTED(); }
9195void APIENTRY glUniform2ui(GLint location, GLuint v0, GLuint v1){ TRACE("*"); UNIMPLEMENTED(); }
9196void APIENTRY glUniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2){ TRACE("*"); UNIMPLEMENTED(); }
9197void APIENTRY glUniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3){ TRACE("*"); UNIMPLEMENTED(); }
9198void APIENTRY glUniform1uiv(GLint location, GLsizei count, const GLuint *value){ TRACE("*"); UNIMPLEMENTED(); }
9199void APIENTRY glUniform2uiv(GLint location, GLsizei count, const GLuint *value){ TRACE("*"); UNIMPLEMENTED(); }
9200void APIENTRY glUniform3uiv(GLint location, GLsizei count, const GLuint *value){ TRACE("*"); UNIMPLEMENTED(); }
9201void APIENTRY glUniform4uiv(GLint location, GLsizei count, const GLuint *value){ TRACE("*"); UNIMPLEMENTED(); }
9202void APIENTRY glTexParameterIiv(GLenum target, GLenum pname, const GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9203void APIENTRY glTexParameterIuiv(GLenum target, GLenum pname, const GLuint *params){ TRACE("*"); UNIMPLEMENTED(); }
9204void APIENTRY glGetTexParameterIiv(GLenum target, GLenum pname, GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9205void APIENTRY glGetTexParameterIuiv(GLenum target, GLenum pname, GLuint *params){ TRACE("*"); UNIMPLEMENTED(); }
9206void APIENTRY glClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint *value){ TRACE("*"); UNIMPLEMENTED(); }
9207void APIENTRY glClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint *value){ TRACE("*"); UNIMPLEMENTED(); }
9208void APIENTRY glClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat *value){ TRACE("*"); UNIMPLEMENTED(); }
9209void APIENTRY glClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil){ TRACE("*"); UNIMPLEMENTED(); }
9210const GLubyte *APIENTRY glGetStringi(GLenum name, GLuint index){ TRACE("*"); UNIMPLEMENTED(); return (GLubyte*)""; return 0; }
9211void *APIENTRY glMapNamedBufferEXT(GLuint buffer, GLenum access){ TRACE("*"); UNIMPLEMENTED(); return 0; }
9212GLboolean APIENTRY glUnmapNamedBufferEXT(GLuint buffer){ TRACE("*"); UNIMPLEMENTED(); return 0; }
9213void APIENTRY glGetNamedBufferParameterivEXT(GLuint buffer, GLenum pname, GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9214void APIENTRY glGetTextureImageEXT(GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void *pixels){ TRACE("*"); UNIMPLEMENTED(); }
9215void APIENTRY glTextureSubImage2DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels){ TRACE("*"); UNIMPLEMENTED(); }
9216void APIENTRY glTextureSubImage3DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels){ TRACE("*"); UNIMPLEMENTED(); }
9217void APIENTRY glcuR0d4nX(GLint* i1)
9218{
9219 i1[1] = 0;
9220}
9221//
9222//000007FEE763807A lea rax, [rsp + 20h]
9223//000007FEE763807F lea rcx, [rsp + 38h]
9224//000007FEE7638084 mov qword ptr[rsp + 20h], rbp
9225//000007FEE7638089 mov qword ptr[rsp + 28h], rsi
9226//000007FEE763808E mov dword ptr[rsp + 38h], 0Dh
9227//000007FEE7638096 mov dword ptr[rsp + 3Ch], 8
9228//000007FEE763809E mov qword ptr[rsp + 50h], rax
9229//000007FEE76380A3 mov dword ptr[rsp + 48h], 7
9230//000007FEE76380AB mov qword ptr[rsp + 40h], 0
9231//000007FEE76380B4 call qword ptr[7FEE81F6890h]
9232
9233void APIENTRY glCopyTexImage1DEXT(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border) { TRACE("*"); UNIMPLEMENTED(); }
9234void APIENTRY glCopyTexImage2DEXT(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) { TRACE("*"); UNIMPLEMENTED(); }
9235void APIENTRY glCopyTexSubImage1DEXT(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width) { TRACE("*"); UNIMPLEMENTED(); }
9236void APIENTRY glCopyTexSubImage2DEXT(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) { TRACE("*"); UNIMPLEMENTED(); }
9237void APIENTRY glCopyTexSubImage3DEXT(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) { TRACE("*"); UNIMPLEMENTED(); }
9238void APIENTRY glPolygonOffsetEXT(GLfloat factor, GLfloat bias) { TRACE("*"); UNIMPLEMENTED(); }
9239void APIENTRY glTexSubImage1DEXT(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels) { TRACE("*"); UNIMPLEMENTED(); }
9240void APIENTRY glTexSubImage2DEXT(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels) { TRACE("*"); UNIMPLEMENTED(); }
9241void APIENTRY glTexImage3DEXT(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels) { TRACE("*"); UNIMPLEMENTED(); }
9242void APIENTRY glTexSubImage3DEXT(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels) { TRACE("*"); UNIMPLEMENTED(); }
9243GLboolean APIENTRY glAreTexturesResidentEXT(GLsizei n, const GLuint *textures, GLboolean *residences) { TRACE("*"); UNIMPLEMENTED(); return 0; }
9244void APIENTRY glBindTextureEXT(GLenum target, GLuint texture) { TRACE("*"); UNIMPLEMENTED(); }
9245void APIENTRY glDeleteTexturesEXT(GLsizei n, const GLuint *textures) { TRACE("*"); UNIMPLEMENTED(); }
9246void APIENTRY glGenTexturesEXT(GLsizei n, GLuint *textures) { TRACE("*"); UNIMPLEMENTED(); }
9247GLboolean APIENTRY glIsTextureEXT(GLuint texture) { TRACE("*"); UNIMPLEMENTED(); return 0; }
9248void APIENTRY glPrioritizeTexturesEXT(GLsizei n, const GLuint *textures, const GLclampf *priorities) { TRACE("*"); UNIMPLEMENTED(); }
9249void APIENTRY glDrawRangeElementsEXT(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices) { TRACE("*"); UNIMPLEMENTED(); }
9250void APIENTRY glSampleCoverageARB(GLfloat value, GLboolean invert) { TRACE("*"); UNIMPLEMENTED(); }
9251void APIENTRY glActiveTextureARB(GLenum texture)
9252{
9253 TRACE("(GLenum texture = 0x%X)", texture);
9254 glActiveTexture(texture);
9255}
9256void APIENTRY glClientActiveTextureARB(GLenum texture) { TRACE("*"); UNIMPLEMENTED(); }
9257void APIENTRY glMultiTexCoord1dARB(GLenum target, GLdouble s) { TRACE("*"); UNIMPLEMENTED(); }
9258void APIENTRY glMultiTexCoord1dvARB(GLenum target, const GLdouble *v) { TRACE("*"); UNIMPLEMENTED(); }
9259void APIENTRY glMultiTexCoord1fARB(GLenum target, GLfloat s) { TRACE("*"); UNIMPLEMENTED(); }
9260void APIENTRY glMultiTexCoord1fvARB(GLenum target, const GLfloat *v) { TRACE("*"); UNIMPLEMENTED(); }
9261void APIENTRY glMultiTexCoord1iARB(GLenum target, GLint s) { TRACE("*"); UNIMPLEMENTED(); }
9262void APIENTRY glMultiTexCoord1ivARB(GLenum target, const GLint *v) { TRACE("*"); UNIMPLEMENTED(); }
9263void APIENTRY glMultiTexCoord1sARB(GLenum target, GLshort s) { TRACE("*"); UNIMPLEMENTED(); }
9264void APIENTRY glMultiTexCoord1svARB(GLenum target, const GLshort *v) { TRACE("*"); UNIMPLEMENTED(); }
9265void APIENTRY glMultiTexCoord2dARB(GLenum target, GLdouble s, GLdouble t) { TRACE("*"); UNIMPLEMENTED(); }
9266void APIENTRY glMultiTexCoord2dvARB(GLenum target, const GLdouble *v) { TRACE("*"); UNIMPLEMENTED(); }
9267void APIENTRY glMultiTexCoord2fARB(GLenum target, GLfloat s, GLfloat t) { TRACE("*"); UNIMPLEMENTED(); }
9268void APIENTRY glMultiTexCoord2fvARB(GLenum target, const GLfloat *v) { TRACE("*"); UNIMPLEMENTED(); }
9269void APIENTRY glMultiTexCoord2iARB(GLenum target, GLint s, GLint t) { TRACE("*"); UNIMPLEMENTED(); }
9270void APIENTRY glMultiTexCoord2ivARB(GLenum target, const GLint *v) { TRACE("*"); UNIMPLEMENTED(); }
9271void APIENTRY glMultiTexCoord2sARB(GLenum target, GLshort s, GLshort t) { TRACE("*"); UNIMPLEMENTED(); }
9272void APIENTRY glMultiTexCoord2svARB(GLenum target, const GLshort *v) { TRACE("*"); UNIMPLEMENTED(); }
9273void APIENTRY glMultiTexCoord3dARB(GLenum target, GLdouble s, GLdouble t, GLdouble r) { TRACE("*"); UNIMPLEMENTED(); }
9274void APIENTRY glMultiTexCoord3dvARB(GLenum target, const GLdouble *v) { TRACE("*"); UNIMPLEMENTED(); }
9275void APIENTRY glMultiTexCoord3fARB(GLenum target, GLfloat s, GLfloat t, GLfloat r) { TRACE("*"); UNIMPLEMENTED(); }
9276void APIENTRY glMultiTexCoord3fvARB(GLenum target, const GLfloat *v) { TRACE("*"); UNIMPLEMENTED(); }
9277void APIENTRY glMultiTexCoord3iARB(GLenum target, GLint s, GLint t, GLint r) { TRACE("*"); UNIMPLEMENTED(); }
9278void APIENTRY glMultiTexCoord3ivARB(GLenum target, const GLint *v) { TRACE("*"); UNIMPLEMENTED(); }
9279void APIENTRY glMultiTexCoord3sARB(GLenum target, GLshort s, GLshort t, GLshort r) { TRACE("*"); UNIMPLEMENTED(); }
9280void APIENTRY glMultiTexCoord3svARB(GLenum target, const GLshort *v) { TRACE("*"); UNIMPLEMENTED(); }
9281void APIENTRY glMultiTexCoord4dARB(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q) { TRACE("*"); UNIMPLEMENTED(); }
9282void APIENTRY glMultiTexCoord4dvARB(GLenum target, const GLdouble *v) { TRACE("*"); UNIMPLEMENTED(); }
9283void APIENTRY glMultiTexCoord4fARB(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q) { TRACE("*"); UNIMPLEMENTED(); }
9284void APIENTRY glMultiTexCoord4fvARB(GLenum target, const GLfloat *v) { TRACE("*"); UNIMPLEMENTED(); }
9285void APIENTRY glMultiTexCoord4iARB(GLenum target, GLint s, GLint t, GLint r, GLint q) { TRACE("*"); UNIMPLEMENTED(); }
9286void APIENTRY glMultiTexCoord4ivARB(GLenum target, const GLint *v) { TRACE("*"); UNIMPLEMENTED(); }
9287void APIENTRY glMultiTexCoord4sARB(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q) { TRACE("*"); UNIMPLEMENTED(); }
9288void APIENTRY glMultiTexCoord4svARB(GLenum target, const GLshort *v) { TRACE("*"); UNIMPLEMENTED(); }
9289void APIENTRY glCompressedTexImage3DARB(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data) { TRACE("*"); UNIMPLEMENTED(); }
9290void APIENTRY glCompressedTexImage2DARB(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data) { TRACE("*"); UNIMPLEMENTED(); }
9291void APIENTRY glCompressedTexImage1DARB(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data) { TRACE("*"); UNIMPLEMENTED(); }
9292void APIENTRY glCompressedTexSubImage3DARB(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data) { TRACE("*"); UNIMPLEMENTED(); }
9293void APIENTRY glCompressedTexSubImage2DARB(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data) { TRACE("*"); UNIMPLEMENTED(); }
9294void APIENTRY glCompressedTexSubImage1DARB(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data) { TRACE("*"); UNIMPLEMENTED(); }
9295void APIENTRY glGetCompressedTexImageARB(GLenum target, GLint level, void *img) { TRACE("*"); UNIMPLEMENTED(); }
9296void APIENTRY glPointParameterfARB(GLenum pname, GLfloat param) { TRACE("*"); UNIMPLEMENTED(); }
9297void APIENTRY glPointParameterfvARB(GLenum pname, const GLfloat *params) { TRACE("*"); UNIMPLEMENTED(); }
9298void APIENTRY glBlendColorEXT(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) { TRACE("*"); UNIMPLEMENTED(); }
9299void APIENTRY glFogCoordfEXT(GLfloat coord) { TRACE("*"); UNIMPLEMENTED(); }
9300void APIENTRY glFogCoordfvEXT(const GLfloat *coord) { TRACE("*"); UNIMPLEMENTED(); }
9301void APIENTRY glFogCoorddEXT(GLdouble coord) { TRACE("*"); UNIMPLEMENTED(); }
9302void APIENTRY glFogCoorddvEXT(const GLdouble *coord) { TRACE("*"); UNIMPLEMENTED(); }
9303void APIENTRY glFogCoordPointerEXT(GLenum type, GLsizei stride, const void *pointer) { TRACE("*"); UNIMPLEMENTED(); }
9304void APIENTRY glMultiDrawArraysEXT(GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount) { TRACE("*"); UNIMPLEMENTED(); }
9305void APIENTRY glMultiDrawElementsEXT(GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount) { TRACE("*"); UNIMPLEMENTED(); }
9306void APIENTRY glGenQueriesARB(GLsizei n, GLuint *ids) { TRACE("*"); UNIMPLEMENTED(); }
9307void APIENTRY glDeleteQueriesARB(GLsizei n, const GLuint *ids) { TRACE("*"); UNIMPLEMENTED(); }
9308GLboolean APIENTRY glIsQueryARB(GLuint id) { TRACE("*"); UNIMPLEMENTED(); return 0; }
9309void APIENTRY glBeginQueryARB(GLenum target, GLuint id) { TRACE("*"); UNIMPLEMENTED(); }
9310void APIENTRY glEndQueryARB(GLenum target) { TRACE("*"); UNIMPLEMENTED(); }
9311void APIENTRY glGetQueryivARB(GLenum target, GLenum pname, GLint *params) { TRACE("*"); UNIMPLEMENTED(); }
9312void APIENTRY glGetQueryObjectivARB(GLuint id, GLenum pname, GLint *params) { TRACE("*"); UNIMPLEMENTED(); }
9313void APIENTRY glGetQueryObjectuivARB(GLuint id, GLenum pname, GLuint *params) { TRACE("*"); UNIMPLEMENTED(); }
9314void APIENTRY glBindBufferARB(GLenum target, GLuint buffer) { TRACE("*"); UNIMPLEMENTED(); }
9315void APIENTRY glDeleteBuffersARB(GLsizei n, const GLuint *buffers) { TRACE("*"); UNIMPLEMENTED(); }
9316void APIENTRY glGenBuffersARB(GLsizei n, GLuint *buffers) { TRACE("*"); UNIMPLEMENTED(); }
9317GLboolean APIENTRY glIsBufferARB(GLuint buffer) { TRACE("*"); UNIMPLEMENTED(); return 0; }
9318void APIENTRY glBufferDataARB(GLenum target, GLsizeiptrARB size, const void *data, GLenum usage) { TRACE("*"); UNIMPLEMENTED(); }
9319void APIENTRY glBufferSubDataARB(GLenum target, GLintptrARB offset, GLsizeiptrARB size, const void *data) { TRACE("*"); UNIMPLEMENTED(); }
9320void APIENTRY glGetBufferSubDataARB(GLenum target, GLintptrARB offset, GLsizeiptrARB size, void *data) { TRACE("*"); UNIMPLEMENTED(); }
9321void *APIENTRY glMapBufferARB(GLenum target, GLenum access) { TRACE("*"); UNIMPLEMENTED(); return 0; }
9322GLboolean APIENTRY glUnmapBufferARB(GLenum target) { TRACE("*"); UNIMPLEMENTED(); return 0; }
9323void APIENTRY glGetBufferParameterivARB(GLenum target, GLenum pname, GLint *params) { TRACE("*"); UNIMPLEMENTED(); }
9324void APIENTRY glGetBufferPointervARB(GLenum target, GLenum pname, void **params) { TRACE("*"); UNIMPLEMENTED(); }
9325void APIENTRY glDrawBuffersARB(GLsizei n, const GLenum *bufs) { TRACE("*"); UNIMPLEMENTED(); }
9326void APIENTRY glBlendEquationSeparateEXT(GLenum modeRGB, GLenum modeAlpha) { TRACE("*"); UNIMPLEMENTED(); }
9327void APIENTRY glActiveStencilFaceEXT(GLenum face) { TRACE("*"); UNIMPLEMENTED(); }
9328void APIENTRY glClampColorARB(GLenum target, GLenum clamp){ TRACE("*"); UNIMPLEMENTED(); }
9329void APIENTRY glDrawArraysInstancedARB(GLenum mode, GLint first, GLsizei count, GLsizei primcount){ TRACE("*"); UNIMPLEMENTED(); }
9330void APIENTRY glDrawElementsInstancedARB(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount){ TRACE("*"); UNIMPLEMENTED(); }
9331void APIENTRY glProgramParameteriARB(GLuint program, GLenum pname, GLint value){ TRACE("*"); UNIMPLEMENTED(); }
9332void APIENTRY glFramebufferTextureARB(GLenum target, GLenum attachment, GLuint texture, GLint level){ TRACE("*"); UNIMPLEMENTED(); }
9333void APIENTRY glFramebufferTextureLayerARB(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer){ TRACE("*"); UNIMPLEMENTED(); }
9334void APIENTRY glFramebufferTextureFaceARB(GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face){ TRACE("*"); UNIMPLEMENTED(); }
9335void APIENTRY glColorTable(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table){ TRACE("*"); UNIMPLEMENTED(); }
9336void APIENTRY glColorTableParameterfv(GLenum target, GLenum pname, const GLfloat *params){ TRACE("*"); UNIMPLEMENTED(); }
9337void APIENTRY glColorTableParameteriv(GLenum target, GLenum pname, const GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9338void APIENTRY glCopyColorTable(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width){ TRACE("*"); UNIMPLEMENTED(); }
9339void APIENTRY glGetColorTable(GLenum target, GLenum format, GLenum type, void *table){ TRACE("*"); UNIMPLEMENTED(); }
9340void APIENTRY glGetColorTableParameterfv(GLenum target, GLenum pname, GLfloat *params){ TRACE("*"); UNIMPLEMENTED(); }
9341void APIENTRY glGetColorTableParameteriv(GLenum target, GLenum pname, GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9342void APIENTRY glColorSubTable(GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data){ TRACE("*"); UNIMPLEMENTED(); }
9343void APIENTRY glCopyColorSubTable(GLenum target, GLsizei start, GLint x, GLint y, GLsizei width){ TRACE("*"); UNIMPLEMENTED(); }
9344void APIENTRY glConvolutionFilter1D(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image){ TRACE("*"); UNIMPLEMENTED(); }
9345void APIENTRY glConvolutionFilter2D(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image){ TRACE("*"); UNIMPLEMENTED(); }
9346void APIENTRY glConvolutionParameterf(GLenum target, GLenum pname, GLfloat params){ TRACE("*"); UNIMPLEMENTED(); }
9347void APIENTRY glConvolutionParameterfv(GLenum target, GLenum pname, const GLfloat *params){ TRACE("*"); UNIMPLEMENTED(); }
9348void APIENTRY glConvolutionParameteri(GLenum target, GLenum pname, GLint params){ TRACE("*"); UNIMPLEMENTED(); }
9349void APIENTRY glConvolutionParameteriv(GLenum target, GLenum pname, const GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9350void APIENTRY glCopyConvolutionFilter1D(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width){ TRACE("*"); UNIMPLEMENTED(); }
9351void APIENTRY glCopyConvolutionFilter2D(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height){ TRACE("*"); UNIMPLEMENTED(); }
9352void APIENTRY glGetConvolutionFilter(GLenum target, GLenum format, GLenum type, void *image){ TRACE("*"); UNIMPLEMENTED(); }
9353void APIENTRY glGetConvolutionParameterfv(GLenum target, GLenum pname, GLfloat *params){ TRACE("*"); UNIMPLEMENTED(); }
9354void APIENTRY glGetConvolutionParameteriv(GLenum target, GLenum pname, GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9355void APIENTRY glGetSeparableFilter(GLenum target, GLenum format, GLenum type, void *row, void *column, void *span){ TRACE("*"); UNIMPLEMENTED(); }
9356void APIENTRY glSeparableFilter2D(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column){ TRACE("*"); UNIMPLEMENTED(); }
9357void APIENTRY glGetHistogram(GLenum target, GLboolean reset, GLenum format, GLenum type, void *values){ TRACE("*"); UNIMPLEMENTED(); }
9358void APIENTRY glGetHistogramParameterfv(GLenum target, GLenum pname, GLfloat *params){ TRACE("*"); UNIMPLEMENTED(); }
9359void APIENTRY glGetHistogramParameteriv(GLenum target, GLenum pname, GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9360void APIENTRY glGetMinmax(GLenum target, GLboolean reset, GLenum format, GLenum type, void *values){ TRACE("*"); UNIMPLEMENTED(); }
9361void APIENTRY glGetMinmaxParameterfv(GLenum target, GLenum pname, GLfloat *params){ TRACE("*"); UNIMPLEMENTED(); }
9362void APIENTRY glGetMinmaxParameteriv(GLenum target, GLenum pname, GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9363void APIENTRY glHistogram(GLenum target, GLsizei width, GLenum internalformat, GLboolean sink){ TRACE("*"); UNIMPLEMENTED(); }
9364void APIENTRY glMinmax(GLenum target, GLenum internalformat, GLboolean sink){ TRACE("*"); UNIMPLEMENTED(); }
9365void APIENTRY glResetHistogram(GLenum target){ TRACE("*"); UNIMPLEMENTED(); }
9366void APIENTRY glResetMinmax(GLenum target){ TRACE("*"); UNIMPLEMENTED(); }
9367void APIENTRY glVertexAttribDivisorARB(GLuint index, GLuint divisor){ TRACE("*"); UNIMPLEMENTED(); }
9368void *APIENTRY glMapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access){ TRACE("*"); UNIMPLEMENTED(); return 0; }
9369void APIENTRY glFlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length){ TRACE("*"); UNIMPLEMENTED(); }
9370void APIENTRY glTexBufferARB(GLenum target, GLenum internalformat, GLuint buffer){ TRACE("*"); UNIMPLEMENTED(); }
9371void APIENTRY glBindVertexArray(GLuint array){ TRACE("*"); UNIMPLEMENTED(); }
9372void APIENTRY glDeleteVertexArrays(GLsizei n, const GLuint *arrays){ TRACE("*"); UNIMPLEMENTED(); }
9373void APIENTRY glGenVertexArrays(GLsizei n, GLuint *arrays){ TRACE("*"); UNIMPLEMENTED(); }
9374GLboolean APIENTRY glIsVertexArray(GLuint array){ TRACE("*"); UNIMPLEMENTED(); return 0; }
9375void APIENTRY glProgramStringARB(GLenum target, GLenum format, GLsizei len, const void *string){ TRACE("*"); UNIMPLEMENTED(); }
9376void APIENTRY glBindProgramARB(GLenum target, GLuint program){ TRACE("*"); UNIMPLEMENTED(); }
9377void APIENTRY glDeleteProgramsARB(GLsizei n, const GLuint *programs){ TRACE("*"); UNIMPLEMENTED(); }
9378void APIENTRY glGenProgramsARB(GLsizei n, GLuint *programs){ TRACE("*"); UNIMPLEMENTED(); }
9379void APIENTRY glProgramEnvParameter4dARB(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w){ TRACE("*"); UNIMPLEMENTED(); }
9380void APIENTRY glProgramEnvParameter4dvARB(GLenum target, GLuint index, const GLdouble *params){ TRACE("*"); UNIMPLEMENTED(); }
9381void APIENTRY glProgramEnvParameter4fARB(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w){ TRACE("*"); UNIMPLEMENTED(); }
9382void APIENTRY glProgramEnvParameter4fvARB(GLenum target, GLuint index, const GLfloat *params){ TRACE("*"); UNIMPLEMENTED(); }
9383void APIENTRY glProgramLocalParameter4dARB(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w){ TRACE("*"); UNIMPLEMENTED(); }
9384void APIENTRY glProgramLocalParameter4dvARB(GLenum target, GLuint index, const GLdouble *params){ TRACE("*"); UNIMPLEMENTED(); }
9385void APIENTRY glProgramLocalParameter4fARB(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w){ TRACE("*"); UNIMPLEMENTED(); }
9386void APIENTRY glProgramLocalParameter4fvARB(GLenum target, GLuint index, const GLfloat *params){ TRACE("*"); UNIMPLEMENTED(); }
9387void APIENTRY glGetProgramEnvParameterdvARB(GLenum target, GLuint index, GLdouble *params){ TRACE("*"); UNIMPLEMENTED(); }
9388void APIENTRY glGetProgramEnvParameterfvARB(GLenum target, GLuint index, GLfloat *params){ TRACE("*"); UNIMPLEMENTED(); }
9389void APIENTRY glGetProgramLocalParameterdvARB(GLenum target, GLuint index, GLdouble *params){ TRACE("*"); UNIMPLEMENTED(); }
9390void APIENTRY glGetProgramLocalParameterfvARB(GLenum target, GLuint index, GLfloat *params){ TRACE("*"); UNIMPLEMENTED(); }
9391void APIENTRY glGetProgramivARB(GLenum target, GLenum pname, GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9392void APIENTRY glGetProgramStringARB(GLenum target, GLenum pname, void *string){ TRACE("*"); UNIMPLEMENTED(); }
9393GLboolean APIENTRY glIsProgramARB(GLuint program){ TRACE("*"); UNIMPLEMENTED(); return 0; }
9394void APIENTRY glEnableVertexAttribArrayARB(GLuint index){ TRACE("*"); UNIMPLEMENTED(); }
9395void APIENTRY glDisableVertexAttribArrayARB(GLuint index){ TRACE("*"); UNIMPLEMENTED(); }
9396void APIENTRY glGetVertexAttribdvARB(GLuint index, GLenum pname, GLdouble *params){ TRACE("*"); UNIMPLEMENTED(); }
9397void APIENTRY glGetVertexAttribfvARB(GLuint index, GLenum pname, GLfloat *params){ TRACE("*"); UNIMPLEMENTED(); }
9398void APIENTRY glGetVertexAttribivARB(GLuint index, GLenum pname, GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9399void APIENTRY glGetVertexAttribPointervARB(GLuint index, GLenum pname, void **pointer){ TRACE("*"); UNIMPLEMENTED(); }
9400void APIENTRY glVertexAttrib1dARB(GLuint index, GLdouble x){ TRACE("*"); UNIMPLEMENTED(); }
9401void APIENTRY glVertexAttrib1dvARB(GLuint index, const GLdouble *v){ TRACE("*"); UNIMPLEMENTED(); }
9402void APIENTRY glVertexAttrib1fARB(GLuint index, GLfloat x){ TRACE("*"); UNIMPLEMENTED(); }
9403void APIENTRY glVertexAttrib1fvARB(GLuint index, const GLfloat *v){ TRACE("*"); UNIMPLEMENTED(); }
9404void APIENTRY glVertexAttrib1sARB(GLuint index, GLshort x){ TRACE("*"); UNIMPLEMENTED(); }
9405void APIENTRY glVertexAttrib1svARB(GLuint index, const GLshort *v){ TRACE("*"); UNIMPLEMENTED(); }
9406void APIENTRY glVertexAttrib2dARB(GLuint index, GLdouble x, GLdouble y){ TRACE("*"); UNIMPLEMENTED(); }
9407void APIENTRY glVertexAttrib2dvARB(GLuint index, const GLdouble *v){ TRACE("*"); UNIMPLEMENTED(); }
9408void APIENTRY glVertexAttrib2fARB(GLuint index, GLfloat x, GLfloat y){ TRACE("*"); UNIMPLEMENTED(); }
9409void APIENTRY glVertexAttrib2fvARB(GLuint index, const GLfloat *v){ TRACE("*"); UNIMPLEMENTED(); }
9410void APIENTRY glVertexAttrib2sARB(GLuint index, GLshort x, GLshort y){ TRACE("*"); UNIMPLEMENTED(); }
9411void APIENTRY glVertexAttrib2svARB(GLuint index, const GLshort *v){ TRACE("*"); UNIMPLEMENTED(); }
9412void APIENTRY glVertexAttrib3dARB(GLuint index, GLdouble x, GLdouble y, GLdouble z){ TRACE("*"); UNIMPLEMENTED(); }
9413void APIENTRY glVertexAttrib3dvARB(GLuint index, const GLdouble *v){ TRACE("*"); UNIMPLEMENTED(); }
9414void APIENTRY glVertexAttrib3fARB(GLuint index, GLfloat x, GLfloat y, GLfloat z){ TRACE("*"); UNIMPLEMENTED(); }
9415void APIENTRY glVertexAttrib3fvARB(GLuint index, const GLfloat *v){ TRACE("*"); UNIMPLEMENTED(); }
9416void APIENTRY glVertexAttrib3sARB(GLuint index, GLshort x, GLshort y, GLshort z){ TRACE("*"); UNIMPLEMENTED(); }
9417void APIENTRY glVertexAttrib3svARB(GLuint index, const GLshort *v){ TRACE("*"); UNIMPLEMENTED(); }
9418void APIENTRY glVertexAttrib4NbvARB(GLuint index, const GLbyte *v){ TRACE("*"); UNIMPLEMENTED(); }
9419void APIENTRY glVertexAttrib4NivARB(GLuint index, const GLint *v){ TRACE("*"); UNIMPLEMENTED(); }
9420void APIENTRY glVertexAttrib4NsvARB(GLuint index, const GLshort *v){ TRACE("*"); UNIMPLEMENTED(); }
9421void APIENTRY glVertexAttrib4NubARB(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w){ TRACE("*"); UNIMPLEMENTED(); }
9422void APIENTRY glVertexAttrib4NubvARB(GLuint index, const GLubyte *v){ TRACE("*"); UNIMPLEMENTED(); }
9423void APIENTRY glVertexAttrib4NuivARB(GLuint index, const GLuint *v){ TRACE("*"); UNIMPLEMENTED(); }
9424void APIENTRY glVertexAttrib4NusvARB(GLuint index, const GLushort *v){ TRACE("*"); UNIMPLEMENTED(); }
9425void APIENTRY glVertexAttrib4bvARB(GLuint index, const GLbyte *v){ TRACE("*"); UNIMPLEMENTED(); }
9426void APIENTRY glVertexAttrib4dARB(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w){ TRACE("*"); UNIMPLEMENTED(); }
9427void APIENTRY glVertexAttrib4dvARB(GLuint index, const GLdouble *v){ TRACE("*"); UNIMPLEMENTED(); }
9428void APIENTRY glVertexAttrib4fARB(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w){ TRACE("*"); UNIMPLEMENTED(); }
9429void APIENTRY glVertexAttrib4fvARB(GLuint index, const GLfloat *v){ TRACE("*"); UNIMPLEMENTED(); }
9430void APIENTRY glVertexAttrib4ivARB(GLuint index, const GLint *v){ TRACE("*"); UNIMPLEMENTED(); }
9431void APIENTRY glVertexAttrib4sARB(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w){ TRACE("*"); UNIMPLEMENTED(); }
9432void APIENTRY glVertexAttrib4svARB(GLuint index, const GLshort *v){ TRACE("*"); UNIMPLEMENTED(); }
9433void APIENTRY glVertexAttrib4ubvARB(GLuint index, const GLubyte *v){ TRACE("*"); UNIMPLEMENTED(); }
9434void APIENTRY glVertexAttrib4uivARB(GLuint index, const GLuint *v){ TRACE("*"); UNIMPLEMENTED(); }
9435void APIENTRY glVertexAttrib4usvARB(GLuint index, const GLushort *v){ TRACE("*"); UNIMPLEMENTED(); }
9436void APIENTRY glVertexAttribPointerARB(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer){ TRACE("*"); UNIMPLEMENTED(); }
9437void APIENTRY glWindowPos2dARB(GLdouble x, GLdouble y){ TRACE("*"); UNIMPLEMENTED(); }
9438void APIENTRY glWindowPos2dvARB(const GLdouble *v){ TRACE("*"); UNIMPLEMENTED(); }
9439void APIENTRY glWindowPos2fARB(GLfloat x, GLfloat y){ TRACE("*"); UNIMPLEMENTED(); }
9440void APIENTRY glWindowPos2fvARB(const GLfloat *v){ TRACE("*"); UNIMPLEMENTED(); }
9441void APIENTRY glWindowPos2iARB(GLint x, GLint y){ TRACE("*"); UNIMPLEMENTED(); }
9442void APIENTRY glWindowPos2ivARB(const GLint *v){ TRACE("*"); UNIMPLEMENTED(); }
9443void APIENTRY glWindowPos2sARB(GLshort x, GLshort y){ TRACE("*"); UNIMPLEMENTED(); }
9444void APIENTRY glWindowPos2svARB(const GLshort *v){ TRACE("*"); UNIMPLEMENTED(); }
9445void APIENTRY glWindowPos3dARB(GLdouble x, GLdouble y, GLdouble z){ TRACE("*"); UNIMPLEMENTED(); }
9446void APIENTRY glWindowPos3dvARB(const GLdouble *v){ TRACE("*"); UNIMPLEMENTED(); }
9447void APIENTRY glWindowPos3fARB(GLfloat x, GLfloat y, GLfloat z){ TRACE("*"); UNIMPLEMENTED(); }
9448void APIENTRY glWindowPos3fvARB(const GLfloat *v){ TRACE("*"); UNIMPLEMENTED(); }
9449void APIENTRY glWindowPos3iARB(GLint x, GLint y, GLint z){ TRACE("*"); UNIMPLEMENTED(); }
9450void APIENTRY glWindowPos3ivARB(const GLint *v){ TRACE("*"); UNIMPLEMENTED(); }
9451void APIENTRY glWindowPos3sARB(GLshort x, GLshort y, GLshort z){ TRACE("*"); UNIMPLEMENTED(); }
9452void APIENTRY glWindowPos3svARB(const GLshort *v){ TRACE("*"); UNIMPLEMENTED(); }
9453void APIENTRY glDrawBuffersATI(GLsizei n, const GLenum *bufs){ TRACE("*"); UNIMPLEMENTED(); }
9454void APIENTRY glUniformBufferEXT(GLuint program, GLint location, GLuint buffer){ TRACE("*"); UNIMPLEMENTED(); }
9455GLint APIENTRY glGetUniformBufferSizeEXT(GLuint program, GLint location){ TRACE("*"); UNIMPLEMENTED(); return 0; }
9456GLintptr APIENTRY glGetUniformOffsetEXT(GLuint program, GLint location){ TRACE("*"); UNIMPLEMENTED(); return 0; }
9457void APIENTRY glLockArraysEXT(GLint first, GLsizei count){ TRACE("*"); UNIMPLEMENTED(); }
9458void APIENTRY glUnlockArraysEXT(void){ TRACE("*"); UNIMPLEMENTED(); }
9459void APIENTRY glDepthBoundsEXT(GLclampd zmin, GLclampd zmax){ TRACE("*"); UNIMPLEMENTED(); }
9460void APIENTRY glMatrixLoadfEXT(GLenum mode, const GLfloat *m){ TRACE("*"); UNIMPLEMENTED(); }
9461void APIENTRY glMatrixLoaddEXT(GLenum mode, const GLdouble *m){ TRACE("*"); UNIMPLEMENTED(); }
9462void APIENTRY glMatrixMultfEXT(GLenum mode, const GLfloat *m){ TRACE("*"); UNIMPLEMENTED(); }
9463void APIENTRY glMatrixMultdEXT(GLenum mode, const GLdouble *m){ TRACE("*"); UNIMPLEMENTED(); }
9464void APIENTRY glMatrixLoadIdentityEXT(GLenum mode){ TRACE("*"); UNIMPLEMENTED(); }
9465void APIENTRY glMatrixRotatefEXT(GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z){ TRACE("*"); UNIMPLEMENTED(); }
9466void APIENTRY glMatrixRotatedEXT(GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z){ TRACE("*"); UNIMPLEMENTED(); }
9467void APIENTRY glMatrixScalefEXT(GLenum mode, GLfloat x, GLfloat y, GLfloat z){ TRACE("*"); UNIMPLEMENTED(); }
9468void APIENTRY glMatrixScaledEXT(GLenum mode, GLdouble x, GLdouble y, GLdouble z){ TRACE("*"); UNIMPLEMENTED(); }
9469void APIENTRY glMatrixTranslatefEXT(GLenum mode, GLfloat x, GLfloat y, GLfloat z){ TRACE("*"); UNIMPLEMENTED(); }
9470void APIENTRY glMatrixTranslatedEXT(GLenum mode, GLdouble x, GLdouble y, GLdouble z){ TRACE("*"); UNIMPLEMENTED(); }
9471void APIENTRY glMatrixFrustumEXT(GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar){ TRACE("*"); UNIMPLEMENTED(); }
9472void APIENTRY glMatrixOrthoEXT(GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar){ TRACE("*"); UNIMPLEMENTED(); }
9473void APIENTRY glMatrixPopEXT(GLenum mode){ TRACE("*"); UNIMPLEMENTED(); }
9474void APIENTRY glMatrixPushEXT(GLenum mode){ TRACE("*"); UNIMPLEMENTED(); }
9475void APIENTRY glClientAttribDefaultEXT(GLbitfield mask){ TRACE("*"); UNIMPLEMENTED(); }
9476void APIENTRY glPushClientAttribDefaultEXT(GLbitfield mask){ TRACE("*"); UNIMPLEMENTED(); }
9477void APIENTRY glTextureParameterfEXT(GLuint texture, GLenum target, GLenum pname, GLfloat param){ TRACE("*"); UNIMPLEMENTED(); }
9478void APIENTRY glTextureParameterfvEXT(GLuint texture, GLenum target, GLenum pname, const GLfloat *params){ TRACE("*"); UNIMPLEMENTED(); }
9479void APIENTRY glTextureParameteriEXT(GLuint texture, GLenum target, GLenum pname, GLint param){ TRACE("*"); UNIMPLEMENTED(); }
9480void APIENTRY glTextureParameterivEXT(GLuint texture, GLenum target, GLenum pname, const GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9481void APIENTRY glTextureImage1DEXT(GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels){ TRACE("*"); UNIMPLEMENTED(); }
9482void APIENTRY glTextureImage2DEXT(GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels){ TRACE("*"); UNIMPLEMENTED(); }
9483void APIENTRY glTextureSubImage1DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels){ TRACE("*"); UNIMPLEMENTED(); }
9484void APIENTRY glCopyTextureImage1DEXT(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border){ TRACE("*"); UNIMPLEMENTED(); }
9485void APIENTRY glCopyTextureImage2DEXT(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border){ TRACE("*"); UNIMPLEMENTED(); }
9486void APIENTRY glCopyTextureSubImage1DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width){ TRACE("*"); UNIMPLEMENTED(); }
9487void APIENTRY glCopyTextureSubImage2DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height){ TRACE("*"); UNIMPLEMENTED(); }
9488void APIENTRY glGetTextureParameterfvEXT(GLuint texture, GLenum target, GLenum pname, GLfloat *params){ TRACE("*"); UNIMPLEMENTED(); }
9489void APIENTRY glGetTextureParameterivEXT(GLuint texture, GLenum target, GLenum pname, GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9490void APIENTRY glGetTextureLevelParameterfvEXT(GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat *params){ TRACE("*"); UNIMPLEMENTED(); }
9491void APIENTRY glGetTextureLevelParameterivEXT(GLuint texture, GLenum target, GLint level, GLenum pname, GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9492void APIENTRY glTextureImage3DEXT(GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels){ TRACE("*"); UNIMPLEMENTED(); }
9493void APIENTRY glCopyTextureSubImage3DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height){ TRACE("*"); UNIMPLEMENTED(); }
9494void APIENTRY glBindMultiTextureEXT(GLenum texunit, GLenum target, GLuint texture){ TRACE("*"); UNIMPLEMENTED(); }
9495void APIENTRY glMultiTexCoordPointerEXT(GLenum texunit, GLint size, GLenum type, GLsizei stride, const void *pointer){ TRACE("*"); UNIMPLEMENTED(); }
9496void APIENTRY glMultiTexEnvfEXT(GLenum texunit, GLenum target, GLenum pname, GLfloat param){ TRACE("*"); UNIMPLEMENTED(); }
9497void APIENTRY glMultiTexEnvfvEXT(GLenum texunit, GLenum target, GLenum pname, const GLfloat *params){ TRACE("*"); UNIMPLEMENTED(); }
9498void APIENTRY glMultiTexEnviEXT(GLenum texunit, GLenum target, GLenum pname, GLint param){ TRACE("*"); UNIMPLEMENTED(); }
9499void APIENTRY glMultiTexEnvivEXT(GLenum texunit, GLenum target, GLenum pname, const GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9500void APIENTRY glMultiTexGendEXT(GLenum texunit, GLenum coord, GLenum pname, GLdouble param){ TRACE("*"); UNIMPLEMENTED(); }
9501void APIENTRY glMultiTexGendvEXT(GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params){ TRACE("*"); UNIMPLEMENTED(); }
9502void APIENTRY glMultiTexGenfEXT(GLenum texunit, GLenum coord, GLenum pname, GLfloat param){ TRACE("*"); UNIMPLEMENTED(); }
9503void APIENTRY glMultiTexGenfvEXT(GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params){ TRACE("*"); UNIMPLEMENTED(); }
9504void APIENTRY glMultiTexGeniEXT(GLenum texunit, GLenum coord, GLenum pname, GLint param){ TRACE("*"); UNIMPLEMENTED(); }
9505void APIENTRY glMultiTexGenivEXT(GLenum texunit, GLenum coord, GLenum pname, const GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9506void APIENTRY glGetMultiTexEnvfvEXT(GLenum texunit, GLenum target, GLenum pname, GLfloat *params){ TRACE("*"); UNIMPLEMENTED(); }
9507void APIENTRY glGetMultiTexEnvivEXT(GLenum texunit, GLenum target, GLenum pname, GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9508void APIENTRY glGetMultiTexGendvEXT(GLenum texunit, GLenum coord, GLenum pname, GLdouble *params){ TRACE("*"); UNIMPLEMENTED(); }
9509void APIENTRY glGetMultiTexGenfvEXT(GLenum texunit, GLenum coord, GLenum pname, GLfloat *params){ TRACE("*"); UNIMPLEMENTED(); }
9510void APIENTRY glGetMultiTexGenivEXT(GLenum texunit, GLenum coord, GLenum pname, GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9511void APIENTRY glMultiTexParameteriEXT(GLenum texunit, GLenum target, GLenum pname, GLint param){ TRACE("*"); UNIMPLEMENTED(); }
9512void APIENTRY glMultiTexParameterivEXT(GLenum texunit, GLenum target, GLenum pname, const GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9513void APIENTRY glMultiTexParameterfEXT(GLenum texunit, GLenum target, GLenum pname, GLfloat param){ TRACE("*"); UNIMPLEMENTED(); }
9514void APIENTRY glMultiTexParameterfvEXT(GLenum texunit, GLenum target, GLenum pname, const GLfloat *params){ TRACE("*"); UNIMPLEMENTED(); }
9515void APIENTRY glMultiTexImage1DEXT(GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels){ TRACE("*"); UNIMPLEMENTED(); }
9516void APIENTRY glMultiTexImage2DEXT(GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels){ TRACE("*"); UNIMPLEMENTED(); }
9517void APIENTRY glMultiTexSubImage1DEXT(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels){ TRACE("*"); UNIMPLEMENTED(); }
9518void APIENTRY glMultiTexSubImage2DEXT(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels){ TRACE("*"); UNIMPLEMENTED(); }
9519void APIENTRY glCopyMultiTexImage1DEXT(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border){ TRACE("*"); UNIMPLEMENTED(); }
9520void APIENTRY glCopyMultiTexImage2DEXT(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border){ TRACE("*"); UNIMPLEMENTED(); }
9521void APIENTRY glCopyMultiTexSubImage1DEXT(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width){ TRACE("*"); UNIMPLEMENTED(); }
9522void APIENTRY glCopyMultiTexSubImage2DEXT(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height){ TRACE("*"); UNIMPLEMENTED(); }
9523void APIENTRY glGetMultiTexImageEXT(GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void *pixels){ TRACE("*"); UNIMPLEMENTED(); }
9524void APIENTRY glGetMultiTexParameterfvEXT(GLenum texunit, GLenum target, GLenum pname, GLfloat *params){ TRACE("*"); UNIMPLEMENTED(); }
9525void APIENTRY glGetMultiTexParameterivEXT(GLenum texunit, GLenum target, GLenum pname, GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9526void APIENTRY glGetMultiTexLevelParameterfvEXT(GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat *params){ TRACE("*"); UNIMPLEMENTED(); }
9527void APIENTRY glGetMultiTexLevelParameterivEXT(GLenum texunit, GLenum target, GLint level, GLenum pname, GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9528void APIENTRY glMultiTexImage3DEXT(GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels){ TRACE("*"); UNIMPLEMENTED(); }
9529void APIENTRY glMultiTexSubImage3DEXT(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels){ TRACE("*"); UNIMPLEMENTED(); }
9530void APIENTRY glCopyMultiTexSubImage3DEXT(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height){ TRACE("*"); UNIMPLEMENTED(); }
9531void APIENTRY glEnableClientStateIndexedEXT(GLenum array, GLuint index){ TRACE("*"); UNIMPLEMENTED(); }
9532void APIENTRY glDisableClientStateIndexedEXT(GLenum array, GLuint index){ TRACE("*"); UNIMPLEMENTED(); }
9533void APIENTRY glGetFloatIndexedvEXT(GLenum target, GLuint index, GLfloat *data){ TRACE("*"); UNIMPLEMENTED(); }
9534void APIENTRY glGetDoubleIndexedvEXT(GLenum target, GLuint index, GLdouble *data){ TRACE("*"); UNIMPLEMENTED(); }
9535void APIENTRY glGetPointerIndexedvEXT(GLenum target, GLuint index, void **data){ TRACE("*"); UNIMPLEMENTED(); }
9536void APIENTRY glEnableIndexedEXT(GLenum target, GLuint index){ TRACE("*"); UNIMPLEMENTED(); }
9537void APIENTRY glDisableIndexedEXT(GLenum target, GLuint index){ TRACE("*"); UNIMPLEMENTED(); }
9538GLboolean APIENTRY glIsEnabledIndexedEXT(GLenum target, GLuint index){ TRACE("*"); UNIMPLEMENTED(); return 0; }
9539void APIENTRY glGetIntegerIndexedvEXT(GLenum target, GLuint index, GLint *data){ TRACE("*"); UNIMPLEMENTED(); }
9540void APIENTRY glGetBooleanIndexedvEXT(GLenum target, GLuint index, GLboolean *data){ TRACE("*"); UNIMPLEMENTED(); }
9541void APIENTRY glCompressedTextureImage3DEXT(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits){ TRACE("*"); UNIMPLEMENTED(); }
9542void APIENTRY glCompressedTextureImage2DEXT(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits){ TRACE("*"); UNIMPLEMENTED(); }
9543void APIENTRY glCompressedTextureImage1DEXT(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits){ TRACE("*"); UNIMPLEMENTED(); }
9544void APIENTRY glCompressedTextureSubImage3DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits){ TRACE("*"); UNIMPLEMENTED(); }
9545void APIENTRY glCompressedTextureSubImage2DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits){ TRACE("*"); UNIMPLEMENTED(); }
9546void APIENTRY glCompressedTextureSubImage1DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits){ TRACE("*"); UNIMPLEMENTED(); }
9547void APIENTRY glGetCompressedTextureImageEXT(GLuint texture, GLenum target, GLint lod, void *img){ TRACE("*"); UNIMPLEMENTED(); }
9548void APIENTRY glCompressedMultiTexImage3DEXT(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits){ TRACE("*"); UNIMPLEMENTED(); }
9549void APIENTRY glCompressedMultiTexImage2DEXT(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits){ TRACE("*"); UNIMPLEMENTED(); }
9550void APIENTRY glCompressedMultiTexImage1DEXT(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits){ TRACE("*"); UNIMPLEMENTED(); }
9551void APIENTRY glCompressedMultiTexSubImage3DEXT(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits){ TRACE("*"); UNIMPLEMENTED(); }
9552void APIENTRY glCompressedMultiTexSubImage2DEXT(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits){ TRACE("*"); UNIMPLEMENTED(); }
9553void APIENTRY glCompressedMultiTexSubImage1DEXT(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits){ TRACE("*"); UNIMPLEMENTED(); }
9554void APIENTRY glGetCompressedMultiTexImageEXT(GLenum texunit, GLenum target, GLint lod, void *img){ TRACE("*"); UNIMPLEMENTED(); }
9555void APIENTRY glMatrixLoadTransposefEXT(GLenum mode, const GLfloat *m){ TRACE("*"); UNIMPLEMENTED(); }
9556void APIENTRY glMatrixLoadTransposedEXT(GLenum mode, const GLdouble *m){ TRACE("*"); UNIMPLEMENTED(); }
9557void APIENTRY glMatrixMultTransposefEXT(GLenum mode, const GLfloat *m){ TRACE("*"); UNIMPLEMENTED(); }
9558void APIENTRY glMatrixMultTransposedEXT(GLenum mode, const GLdouble *m){ TRACE("*"); UNIMPLEMENTED(); }
9559void APIENTRY glNamedBufferDataEXT(GLuint buffer, GLsizeiptr size, const void *data, GLenum usage){ TRACE("*"); UNIMPLEMENTED(); }
9560void APIENTRY glNamedBufferSubDataEXT(GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data){ TRACE("*"); UNIMPLEMENTED(); }
9561void APIENTRY glGetNamedBufferPointervEXT(GLuint buffer, GLenum pname, void **params){ TRACE("*"); UNIMPLEMENTED(); }
9562void APIENTRY glGetNamedBufferSubDataEXT(GLuint buffer, GLintptr offset, GLsizeiptr size, void *data){ TRACE("*"); UNIMPLEMENTED(); }
9563void APIENTRY glProgramUniform1fEXT(GLuint program, GLint location, GLfloat v0){ TRACE("*"); UNIMPLEMENTED(); }
9564void APIENTRY glProgramUniform2fEXT(GLuint program, GLint location, GLfloat v0, GLfloat v1){ TRACE("*"); UNIMPLEMENTED(); }
9565void APIENTRY glProgramUniform3fEXT(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2){ TRACE("*"); UNIMPLEMENTED(); }
9566void APIENTRY glProgramUniform4fEXT(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3){ TRACE("*"); UNIMPLEMENTED(); }
9567void APIENTRY glProgramUniform1iEXT(GLuint program, GLint location, GLint v0){ TRACE("*"); UNIMPLEMENTED(); }
9568void APIENTRY glProgramUniform2iEXT(GLuint program, GLint location, GLint v0, GLint v1){ TRACE("*"); UNIMPLEMENTED(); }
9569void APIENTRY glProgramUniform3iEXT(GLuint program, GLint location, GLint v0, GLint v1, GLint v2){ TRACE("*"); UNIMPLEMENTED(); }
9570void APIENTRY glProgramUniform4iEXT(GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3){ TRACE("*"); UNIMPLEMENTED(); }
9571void APIENTRY glProgramUniform1fvEXT(GLuint program, GLint location, GLsizei count, const GLfloat *value){ TRACE("*"); UNIMPLEMENTED(); }
9572void APIENTRY glProgramUniform2fvEXT(GLuint program, GLint location, GLsizei count, const GLfloat *value){ TRACE("*"); UNIMPLEMENTED(); }
9573void APIENTRY glProgramUniform3fvEXT(GLuint program, GLint location, GLsizei count, const GLfloat *value){ TRACE("*"); UNIMPLEMENTED(); }
9574void APIENTRY glProgramUniform4fvEXT(GLuint program, GLint location, GLsizei count, const GLfloat *value){ TRACE("*"); UNIMPLEMENTED(); }
9575void APIENTRY glProgramUniform1ivEXT(GLuint program, GLint location, GLsizei count, const GLint *value){ TRACE("*"); UNIMPLEMENTED(); }
9576void APIENTRY glProgramUniform2ivEXT(GLuint program, GLint location, GLsizei count, const GLint *value){ TRACE("*"); UNIMPLEMENTED(); }
9577void APIENTRY glProgramUniform3ivEXT(GLuint program, GLint location, GLsizei count, const GLint *value){ TRACE("*"); UNIMPLEMENTED(); }
9578void APIENTRY glProgramUniform4ivEXT(GLuint program, GLint location, GLsizei count, const GLint *value){ TRACE("*"); UNIMPLEMENTED(); }
9579void APIENTRY glProgramUniformMatrix2fvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value){ TRACE("*"); UNIMPLEMENTED(); }
9580void APIENTRY glProgramUniformMatrix3fvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value){ TRACE("*"); UNIMPLEMENTED(); }
9581void APIENTRY glProgramUniformMatrix4fvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value){ TRACE("*"); UNIMPLEMENTED(); }
9582void APIENTRY glProgramUniformMatrix2x3fvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value){ TRACE("*"); UNIMPLEMENTED(); }
9583void APIENTRY glProgramUniformMatrix3x2fvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value){ TRACE("*"); UNIMPLEMENTED(); }
9584void APIENTRY glProgramUniformMatrix2x4fvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value){ TRACE("*"); UNIMPLEMENTED(); }
9585void APIENTRY glProgramUniformMatrix4x2fvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value){ TRACE("*"); UNIMPLEMENTED(); }
9586void APIENTRY glProgramUniformMatrix3x4fvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value){ TRACE("*"); UNIMPLEMENTED(); }
9587void APIENTRY glProgramUniformMatrix4x3fvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value){ TRACE("*"); UNIMPLEMENTED(); }
9588void APIENTRY glTextureBufferEXT(GLuint texture, GLenum target, GLenum internalformat, GLuint buffer){ TRACE("*"); UNIMPLEMENTED(); }
9589void APIENTRY glMultiTexBufferEXT(GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer){ TRACE("*"); UNIMPLEMENTED(); }
9590void APIENTRY glTextureParameterIivEXT(GLuint texture, GLenum target, GLenum pname, const GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9591void APIENTRY glTextureParameterIuivEXT(GLuint texture, GLenum target, GLenum pname, const GLuint *params){ TRACE("*"); UNIMPLEMENTED(); }
9592void APIENTRY glGetTextureParameterIivEXT(GLuint texture, GLenum target, GLenum pname, GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9593void APIENTRY glGetTextureParameterIuivEXT(GLuint texture, GLenum target, GLenum pname, GLuint *params){ TRACE("*"); UNIMPLEMENTED(); }
9594void APIENTRY glMultiTexParameterIivEXT(GLenum texunit, GLenum target, GLenum pname, const GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9595void APIENTRY glMultiTexParameterIuivEXT(GLenum texunit, GLenum target, GLenum pname, const GLuint *params){ TRACE("*"); UNIMPLEMENTED(); }
9596void APIENTRY glGetMultiTexParameterIivEXT(GLenum texunit, GLenum target, GLenum pname, GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9597void APIENTRY glGetMultiTexParameterIuivEXT(GLenum texunit, GLenum target, GLenum pname, GLuint *params){ TRACE("*"); UNIMPLEMENTED(); }
9598void APIENTRY glProgramUniform1uiEXT(GLuint program, GLint location, GLuint v0){ TRACE("*"); UNIMPLEMENTED(); }
9599void APIENTRY glProgramUniform2uiEXT(GLuint program, GLint location, GLuint v0, GLuint v1){ TRACE("*"); UNIMPLEMENTED(); }
9600void APIENTRY glProgramUniform3uiEXT(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2){ TRACE("*"); UNIMPLEMENTED(); }
9601void APIENTRY glProgramUniform4uiEXT(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3){ TRACE("*"); UNIMPLEMENTED(); }
9602void APIENTRY glProgramUniform1uivEXT(GLuint program, GLint location, GLsizei count, const GLuint *value){ TRACE("*"); UNIMPLEMENTED(); }
9603void APIENTRY glProgramUniform2uivEXT(GLuint program, GLint location, GLsizei count, const GLuint *value){ TRACE("*"); UNIMPLEMENTED(); }
9604void APIENTRY glProgramUniform3uivEXT(GLuint program, GLint location, GLsizei count, const GLuint *value){ TRACE("*"); UNIMPLEMENTED(); }
9605void APIENTRY glProgramUniform4uivEXT(GLuint program, GLint location, GLsizei count, const GLuint *value){ TRACE("*"); UNIMPLEMENTED(); }
9606void APIENTRY glNamedProgramLocalParameters4fvEXT(GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params){ TRACE("*"); UNIMPLEMENTED(); }
9607void APIENTRY glNamedProgramLocalParameterI4iEXT(GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w){ TRACE("*"); UNIMPLEMENTED(); }
9608void APIENTRY glNamedProgramLocalParameterI4ivEXT(GLuint program, GLenum target, GLuint index, const GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9609void APIENTRY glNamedProgramLocalParametersI4ivEXT(GLuint program, GLenum target, GLuint index, GLsizei count, const GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9610void APIENTRY glNamedProgramLocalParameterI4uiEXT(GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w){ TRACE("*"); UNIMPLEMENTED(); }
9611void APIENTRY glNamedProgramLocalParameterI4uivEXT(GLuint program, GLenum target, GLuint index, const GLuint *params){ TRACE("*"); UNIMPLEMENTED(); }
9612void APIENTRY glNamedProgramLocalParametersI4uivEXT(GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params){ TRACE("*"); UNIMPLEMENTED(); }
9613void APIENTRY glGetNamedProgramLocalParameterIivEXT(GLuint program, GLenum target, GLuint index, GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9614void APIENTRY glGetNamedProgramLocalParameterIuivEXT(GLuint program, GLenum target, GLuint index, GLuint *params){ TRACE("*"); UNIMPLEMENTED(); }
9615void APIENTRY glEnableClientStateiEXT(GLenum array, GLuint index){ TRACE("*"); UNIMPLEMENTED(); }
9616void APIENTRY glDisableClientStateiEXT(GLenum array, GLuint index){ TRACE("*"); UNIMPLEMENTED(); }
9617void APIENTRY glGetFloati_vEXT(GLenum pname, GLuint index, GLfloat *params){ TRACE("*"); UNIMPLEMENTED(); }
9618void APIENTRY glGetDoublei_vEXT(GLenum pname, GLuint index, GLdouble *params){ TRACE("*"); UNIMPLEMENTED(); }
9619void APIENTRY glGetPointeri_vEXT(GLenum pname, GLuint index, void **params){ TRACE("*"); UNIMPLEMENTED(); }
9620void APIENTRY glNamedProgramStringEXT(GLuint program, GLenum target, GLenum format, GLsizei len, const void *string){ TRACE("*"); UNIMPLEMENTED(); }
9621void APIENTRY glNamedProgramLocalParameter4dEXT(GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w){ TRACE("*"); UNIMPLEMENTED(); }
9622void APIENTRY glNamedProgramLocalParameter4dvEXT(GLuint program, GLenum target, GLuint index, const GLdouble *params){ TRACE("*"); UNIMPLEMENTED(); }
9623void APIENTRY glNamedProgramLocalParameter4fEXT(GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w){ TRACE("*"); UNIMPLEMENTED(); }
9624void APIENTRY glNamedProgramLocalParameter4fvEXT(GLuint program, GLenum target, GLuint index, const GLfloat *params){ TRACE("*"); UNIMPLEMENTED(); }
9625void APIENTRY glGetNamedProgramLocalParameterdvEXT(GLuint program, GLenum target, GLuint index, GLdouble *params){ TRACE("*"); UNIMPLEMENTED(); }
9626void APIENTRY glGetNamedProgramLocalParameterfvEXT(GLuint program, GLenum target, GLuint index, GLfloat *params){ TRACE("*"); UNIMPLEMENTED(); }
9627void APIENTRY glGetNamedProgramivEXT(GLuint program, GLenum target, GLenum pname, GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9628void APIENTRY glGetNamedProgramStringEXT(GLuint program, GLenum target, GLenum pname, void *string){ TRACE("*"); UNIMPLEMENTED(); }
9629void APIENTRY glNamedRenderbufferStorageEXT(GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height){ TRACE("*"); UNIMPLEMENTED(); }
9630void APIENTRY glGetNamedRenderbufferParameterivEXT(GLuint renderbuffer, GLenum pname, GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9631void APIENTRY glNamedRenderbufferStorageMultisampleEXT(GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height){ TRACE("*"); UNIMPLEMENTED(); }
9632void APIENTRY glNamedRenderbufferStorageMultisampleCoverageEXT(GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height){ TRACE("*"); UNIMPLEMENTED(); }
9633GLenum APIENTRY glCheckNamedFramebufferStatusEXT(GLuint framebuffer, GLenum target){ TRACE("*"); UNIMPLEMENTED(); return 0; }
9634void APIENTRY glNamedFramebufferTexture1DEXT(GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level){ TRACE("*"); UNIMPLEMENTED(); }
9635void APIENTRY glNamedFramebufferTexture2DEXT(GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level){ TRACE("*"); UNIMPLEMENTED(); }
9636void APIENTRY glNamedFramebufferTexture3DEXT(GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset){ TRACE("*"); UNIMPLEMENTED(); }
9637void APIENTRY glNamedFramebufferRenderbufferEXT(GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer){ TRACE("*"); UNIMPLEMENTED(); }
9638void APIENTRY glGetNamedFramebufferAttachmentParameterivEXT(GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9639void APIENTRY glGenerateTextureMipmapEXT(GLuint texture, GLenum target){ TRACE("*"); UNIMPLEMENTED(); }
9640void APIENTRY glGenerateMultiTexMipmapEXT(GLenum texunit, GLenum target){ TRACE("*"); UNIMPLEMENTED(); }
9641void APIENTRY glFramebufferDrawBufferEXT(GLuint framebuffer, GLenum mode){ TRACE("*"); UNIMPLEMENTED(); }
9642void APIENTRY glFramebufferDrawBuffersEXT(GLuint framebuffer, GLsizei n, const GLenum *bufs){ TRACE("*"); UNIMPLEMENTED(); }
9643void APIENTRY glFramebufferReadBufferEXT(GLuint framebuffer, GLenum mode){ TRACE("*"); UNIMPLEMENTED(); }
9644void APIENTRY glGetFramebufferParameterivEXT(GLuint framebuffer, GLenum pname, GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9645void APIENTRY glNamedCopyBufferSubDataEXT(GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size){ TRACE("*"); UNIMPLEMENTED(); }
9646void APIENTRY glNamedFramebufferTextureEXT(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level){ TRACE("*"); UNIMPLEMENTED(); }
9647void APIENTRY glNamedFramebufferTextureLayerEXT(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer){ TRACE("*"); UNIMPLEMENTED(); }
9648void APIENTRY glNamedFramebufferTextureFaceEXT(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face){ TRACE("*"); UNIMPLEMENTED(); }
9649void APIENTRY glTextureRenderbufferEXT(GLuint texture, GLenum target, GLuint renderbuffer){ TRACE("*"); UNIMPLEMENTED(); }
9650void APIENTRY glMultiTexRenderbufferEXT(GLenum texunit, GLenum target, GLuint renderbuffer){ TRACE("*"); UNIMPLEMENTED(); }
9651void APIENTRY glVertexArrayVertexOffsetEXT(GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset){ TRACE("*"); UNIMPLEMENTED(); }
9652void APIENTRY glVertexArrayColorOffsetEXT(GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset){ TRACE("*"); UNIMPLEMENTED(); }
9653void APIENTRY glVertexArrayEdgeFlagOffsetEXT(GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset){ TRACE("*"); UNIMPLEMENTED(); }
9654void APIENTRY glVertexArrayIndexOffsetEXT(GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset){ TRACE("*"); UNIMPLEMENTED(); }
9655void APIENTRY glVertexArrayNormalOffsetEXT(GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset){ TRACE("*"); UNIMPLEMENTED(); }
9656void APIENTRY glVertexArrayTexCoordOffsetEXT(GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset){ TRACE("*"); UNIMPLEMENTED(); }
9657void APIENTRY glVertexArrayMultiTexCoordOffsetEXT(GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset){ TRACE("*"); UNIMPLEMENTED(); }
9658void APIENTRY glVertexArrayFogCoordOffsetEXT(GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset){ TRACE("*"); UNIMPLEMENTED(); }
9659void APIENTRY glVertexArraySecondaryColorOffsetEXT(GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset){ TRACE("*"); UNIMPLEMENTED(); }
9660void APIENTRY glVertexArrayVertexAttribOffsetEXT(GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset){ TRACE("*"); UNIMPLEMENTED(); }
9661void APIENTRY glVertexArrayVertexAttribIOffsetEXT(GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset){ TRACE("*"); UNIMPLEMENTED(); }
9662void APIENTRY glEnableVertexArrayEXT(GLuint vaobj, GLenum array){ TRACE("*"); UNIMPLEMENTED(); }
9663void APIENTRY glDisableVertexArrayEXT(GLuint vaobj, GLenum array){ TRACE("*"); UNIMPLEMENTED(); }
9664void APIENTRY glEnableVertexArrayAttribEXT(GLuint vaobj, GLuint index){ TRACE("*"); UNIMPLEMENTED(); }
9665void APIENTRY glDisableVertexArrayAttribEXT(GLuint vaobj, GLuint index){ TRACE("*"); UNIMPLEMENTED(); }
9666void APIENTRY glGetVertexArrayIntegervEXT(GLuint vaobj, GLenum pname, GLint *param){ TRACE("*"); UNIMPLEMENTED(); }
9667void APIENTRY glGetVertexArrayPointervEXT(GLuint vaobj, GLenum pname, void **param){ TRACE("*"); UNIMPLEMENTED(); }
9668void APIENTRY glGetVertexArrayIntegeri_vEXT(GLuint vaobj, GLuint index, GLenum pname, GLint *param){ TRACE("*"); UNIMPLEMENTED(); }
9669void APIENTRY glGetVertexArrayPointeri_vEXT(GLuint vaobj, GLuint index, GLenum pname, void **param){ TRACE("*"); UNIMPLEMENTED(); }
9670void *APIENTRY glMapNamedBufferRangeEXT(GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access){ TRACE("*"); UNIMPLEMENTED(); return 0; }
9671void APIENTRY glFlushMappedNamedBufferRangeEXT(GLuint buffer, GLintptr offset, GLsizeiptr length){ TRACE("*"); UNIMPLEMENTED(); }
9672void APIENTRY glNamedBufferStorageEXT(GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags){ TRACE("*"); UNIMPLEMENTED(); }
9673void APIENTRY glClearNamedBufferDataEXT(GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data){ TRACE("*"); UNIMPLEMENTED(); }
9674void APIENTRY glClearNamedBufferSubDataEXT(GLuint buffer, GLenum internalformat, GLsizeiptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data){ TRACE("*"); UNIMPLEMENTED(); }
9675void APIENTRY glNamedFramebufferParameteriEXT(GLuint framebuffer, GLenum pname, GLint param){ TRACE("*"); UNIMPLEMENTED(); }
9676void APIENTRY glGetNamedFramebufferParameterivEXT(GLuint framebuffer, GLenum pname, GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9677void APIENTRY glProgramUniform1dEXT(GLuint program, GLint location, GLdouble x){ TRACE("*"); UNIMPLEMENTED(); }
9678void APIENTRY glProgramUniform2dEXT(GLuint program, GLint location, GLdouble x, GLdouble y){ TRACE("*"); UNIMPLEMENTED(); }
9679void APIENTRY glProgramUniform3dEXT(GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z){ TRACE("*"); UNIMPLEMENTED(); }
9680void APIENTRY glProgramUniform4dEXT(GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w){ TRACE("*"); UNIMPLEMENTED(); }
9681void APIENTRY glProgramUniform1dvEXT(GLuint program, GLint location, GLsizei count, const GLdouble *value){ TRACE("*"); UNIMPLEMENTED(); }
9682void APIENTRY glProgramUniform2dvEXT(GLuint program, GLint location, GLsizei count, const GLdouble *value){ TRACE("*"); UNIMPLEMENTED(); }
9683void APIENTRY glProgramUniform3dvEXT(GLuint program, GLint location, GLsizei count, const GLdouble *value){ TRACE("*"); UNIMPLEMENTED(); }
9684void APIENTRY glProgramUniform4dvEXT(GLuint program, GLint location, GLsizei count, const GLdouble *value){ TRACE("*"); UNIMPLEMENTED(); }
9685void APIENTRY glProgramUniformMatrix2dvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value){ TRACE("*"); UNIMPLEMENTED(); }
9686void APIENTRY glProgramUniformMatrix3dvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value){ TRACE("*"); UNIMPLEMENTED(); }
9687void APIENTRY glProgramUniformMatrix4dvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value){ TRACE("*"); UNIMPLEMENTED(); }
9688void APIENTRY glProgramUniformMatrix2x3dvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value){ TRACE("*"); UNIMPLEMENTED(); }
9689void APIENTRY glProgramUniformMatrix2x4dvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value){ TRACE("*"); UNIMPLEMENTED(); }
9690void APIENTRY glProgramUniformMatrix3x2dvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value){ TRACE("*"); UNIMPLEMENTED(); }
9691void APIENTRY glProgramUniformMatrix3x4dvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value){ TRACE("*"); UNIMPLEMENTED(); }
9692void APIENTRY glProgramUniformMatrix4x2dvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value){ TRACE("*"); UNIMPLEMENTED(); }
9693void APIENTRY glProgramUniformMatrix4x3dvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value){ TRACE("*"); UNIMPLEMENTED(); }
9694void APIENTRY glTextureBufferRangeEXT(GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size){ TRACE("*"); UNIMPLEMENTED(); }
9695void APIENTRY glTextureStorage1DEXT(GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width){ TRACE("*"); UNIMPLEMENTED(); }
9696void APIENTRY glTextureStorage2DEXT(GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height){ TRACE("*"); UNIMPLEMENTED(); }
9697void APIENTRY glTextureStorage3DEXT(GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth){ TRACE("*"); UNIMPLEMENTED(); }
9698void APIENTRY glTextureStorage2DMultisampleEXT(GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations){ TRACE("*"); UNIMPLEMENTED(); }
9699void APIENTRY glTextureStorage3DMultisampleEXT(GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations){ TRACE("*"); UNIMPLEMENTED(); }
9700void APIENTRY glVertexArrayBindVertexBufferEXT(GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride){ TRACE("*"); UNIMPLEMENTED(); }
9701void APIENTRY glVertexArrayVertexAttribFormatEXT(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset){ TRACE("*"); UNIMPLEMENTED(); }
9702void APIENTRY glVertexArrayVertexAttribIFormatEXT(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset){ TRACE("*"); UNIMPLEMENTED(); }
9703void APIENTRY glVertexArrayVertexAttribLFormatEXT(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset){ TRACE("*"); UNIMPLEMENTED(); }
9704void APIENTRY glVertexArrayVertexAttribBindingEXT(GLuint vaobj, GLuint attribindex, GLuint bindingindex){ TRACE("*"); UNIMPLEMENTED(); }
9705void APIENTRY glVertexArrayVertexBindingDivisorEXT(GLuint vaobj, GLuint bindingindex, GLuint divisor){ TRACE("*"); UNIMPLEMENTED(); }
9706void APIENTRY glVertexArrayVertexAttribLOffsetEXT(GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset){ TRACE("*"); UNIMPLEMENTED(); }
9707void APIENTRY glTexturePageCommitmentEXT(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean resident){ TRACE("*"); UNIMPLEMENTED(); }
9708void APIENTRY glVertexArrayVertexAttribDivisorEXT(GLuint vaobj, GLuint index, GLuint divisor){ TRACE("*"); UNIMPLEMENTED(); }
9709
9710
9711void APIENTRY glColorMaskIndexedEXT(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a){ TRACE("*"); UNIMPLEMENTED(); }
9712void APIENTRY glDrawArraysInstancedEXT(GLenum mode, GLint start, GLsizei count, GLsizei primcount){ TRACE("*"); UNIMPLEMENTED(); }
9713void APIENTRY glDrawElementsInstancedEXT(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount){ TRACE("*"); UNIMPLEMENTED(); }
9714void APIENTRY glProgramParameteriEXT(GLuint program, GLenum pname, GLint value){ TRACE("*"); UNIMPLEMENTED(); }
9715void APIENTRY glFramebufferTextureEXT(GLenum target, GLenum attachment, GLuint texture, GLint level){ TRACE("*"); UNIMPLEMENTED(); }
9716void APIENTRY glFramebufferTextureLayerEXT(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer){ TRACE("*"); UNIMPLEMENTED(); }
9717void APIENTRY glFramebufferTextureFaceEXT(GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face){ TRACE("*"); UNIMPLEMENTED(); }
9718void APIENTRY glProgramEnvParameters4fvEXT(GLenum target, GLuint index, GLsizei count, const GLfloat *params){ TRACE("*"); UNIMPLEMENTED(); }
9719void APIENTRY glProgramLocalParameters4fvEXT(GLenum target, GLuint index, GLsizei count, const GLfloat *params){ TRACE("*"); UNIMPLEMENTED(); }
9720void APIENTRY glGetUniformuivEXT(GLuint program, GLint location, GLuint *params){ TRACE("*"); UNIMPLEMENTED(); }
9721void APIENTRY glBindFragDataLocationEXT(GLuint program, GLuint color, const GLchar *name){ TRACE("*"); UNIMPLEMENTED(); }
9722GLint APIENTRY glGetFragDataLocationEXT(GLuint program, const GLchar *name){ TRACE("*"); UNIMPLEMENTED(); return 0; }
9723void APIENTRY glUniform1uiEXT(GLint location, GLuint v0){ TRACE("*"); UNIMPLEMENTED(); }
9724void APIENTRY glUniform2uiEXT(GLint location, GLuint v0, GLuint v1){ TRACE("*"); UNIMPLEMENTED(); }
9725void APIENTRY glUniform3uiEXT(GLint location, GLuint v0, GLuint v1, GLuint v2){ TRACE("*"); UNIMPLEMENTED(); }
9726void APIENTRY glUniform4uiEXT(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3){ TRACE("*"); UNIMPLEMENTED(); }
9727void APIENTRY glUniform1uivEXT(GLint location, GLsizei count, const GLuint *value){ TRACE("*"); UNIMPLEMENTED(); }
9728void APIENTRY glUniform2uivEXT(GLint location, GLsizei count, const GLuint *value){ TRACE("*"); UNIMPLEMENTED(); }
9729void APIENTRY glUniform3uivEXT(GLint location, GLsizei count, const GLuint *value){ TRACE("*"); UNIMPLEMENTED(); }
9730void APIENTRY glUniform4uivEXT(GLint location, GLsizei count, const GLuint *value){ TRACE("*"); UNIMPLEMENTED(); }
9731void APIENTRY glVertexAttribI1iEXT(GLuint index, GLint x){ TRACE("*"); UNIMPLEMENTED(); }
9732void APIENTRY glVertexAttribI2iEXT(GLuint index, GLint x, GLint y){ TRACE("*"); UNIMPLEMENTED(); }
9733void APIENTRY glVertexAttribI3iEXT(GLuint index, GLint x, GLint y, GLint z){ TRACE("*"); UNIMPLEMENTED(); }
9734void APIENTRY glVertexAttribI4iEXT(GLuint index, GLint x, GLint y, GLint z, GLint w){ TRACE("*"); UNIMPLEMENTED(); }
9735void APIENTRY glVertexAttribI1uiEXT(GLuint index, GLuint x){ TRACE("*"); UNIMPLEMENTED(); }
9736void APIENTRY glVertexAttribI2uiEXT(GLuint index, GLuint x, GLuint y){ TRACE("*"); UNIMPLEMENTED(); }
9737void APIENTRY glVertexAttribI3uiEXT(GLuint index, GLuint x, GLuint y, GLuint z){ TRACE("*"); UNIMPLEMENTED(); }
9738void APIENTRY glVertexAttribI4uiEXT(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w){ TRACE("*"); UNIMPLEMENTED(); }
9739void APIENTRY glVertexAttribI1ivEXT(GLuint index, const GLint *v){ TRACE("*"); UNIMPLEMENTED(); }
9740void APIENTRY glVertexAttribI2ivEXT(GLuint index, const GLint *v){ TRACE("*"); UNIMPLEMENTED(); }
9741void APIENTRY glVertexAttribI3ivEXT(GLuint index, const GLint *v){ TRACE("*"); UNIMPLEMENTED(); }
9742void APIENTRY glVertexAttribI4ivEXT(GLuint index, const GLint *v){ TRACE("*"); UNIMPLEMENTED(); }
9743void APIENTRY glVertexAttribI1uivEXT(GLuint index, const GLuint *v){ TRACE("*"); UNIMPLEMENTED(); }
9744void APIENTRY glVertexAttribI2uivEXT(GLuint index, const GLuint *v){ TRACE("*"); UNIMPLEMENTED(); }
9745void APIENTRY glVertexAttribI3uivEXT(GLuint index, const GLuint *v){ TRACE("*"); UNIMPLEMENTED(); }
9746void APIENTRY glVertexAttribI4uivEXT(GLuint index, const GLuint *v){ TRACE("*"); UNIMPLEMENTED(); }
9747void APIENTRY glVertexAttribI4bvEXT(GLuint index, const GLbyte *v){ TRACE("*"); UNIMPLEMENTED(); }
9748void APIENTRY glVertexAttribI4svEXT(GLuint index, const GLshort *v){ TRACE("*"); UNIMPLEMENTED(); }
9749void APIENTRY glVertexAttribI4ubvEXT(GLuint index, const GLubyte *v){ TRACE("*"); UNIMPLEMENTED(); }
9750void APIENTRY glVertexAttribI4usvEXT(GLuint index, const GLushort *v){ TRACE("*"); UNIMPLEMENTED(); }
9751void APIENTRY glVertexAttribIPointerEXT(GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer){ TRACE("*"); UNIMPLEMENTED(); }
9752void APIENTRY glGetVertexAttribIivEXT(GLuint index, GLenum pname, GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9753void APIENTRY glGetVertexAttribIuivEXT(GLuint index, GLenum pname, GLuint *params){ TRACE("*"); UNIMPLEMENTED(); }
9754void APIENTRY glPointParameterfEXT(GLenum pname, GLfloat param){ TRACE("*"); UNIMPLEMENTED(); }
9755void APIENTRY glPointParameterfvEXT(GLenum pname, const GLfloat *params){ TRACE("*"); UNIMPLEMENTED(); }
9756void APIENTRY glTexBufferEXT(GLenum target, GLenum internalformat, GLuint buffer){ TRACE("*"); UNIMPLEMENTED(); }
9757void APIENTRY glTexParameterIivEXT(GLenum target, GLenum pname, const GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9758void APIENTRY glTexParameterIuivEXT(GLenum target, GLenum pname, const GLuint *params){ TRACE("*"); UNIMPLEMENTED(); }
9759void APIENTRY glGetTexParameterIivEXT(GLenum target, GLenum pname, GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9760void APIENTRY glGetTexParameterIuivEXT(GLenum target, GLenum pname, GLuint *params){ TRACE("*"); UNIMPLEMENTED(); }
9761void APIENTRY glClearColorIiEXT(GLint red, GLint green, GLint blue, GLint alpha){ TRACE("*"); UNIMPLEMENTED(); }
9762void APIENTRY glClearColorIuiEXT(GLuint red, GLuint green, GLuint blue, GLuint alpha){ TRACE("*"); UNIMPLEMENTED(); }
9763void APIENTRY glGetQueryObjecti64vEXT(GLuint id, GLenum pname, GLint64 *params){ TRACE("*"); UNIMPLEMENTED(); }
9764void APIENTRY glGetQueryObjectui64vEXT(GLuint id, GLenum pname, GLuint64 *params){ TRACE("*"); UNIMPLEMENTED(); }
9765#define GL_GLEXT_PROTOTYPES
9766void APIENTRY glArrayElementEXT(GLint i){ TRACE("*"); UNIMPLEMENTED(); }
9767void APIENTRY glColorPointerEXT(GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer){ TRACE("*"); UNIMPLEMENTED(); }
9768void APIENTRY glDrawArraysEXT(GLenum mode, GLint first, GLsizei count){ TRACE("*"); UNIMPLEMENTED(); }
9769void APIENTRY glEdgeFlagPointerEXT(GLsizei stride, GLsizei count, const GLboolean *pointer){ TRACE("*"); UNIMPLEMENTED(); }
9770void APIENTRY glGetPointervEXT(GLenum pname, void **params){ TRACE("*"); UNIMPLEMENTED(); }
9771void APIENTRY glIndexPointerEXT(GLenum type, GLsizei stride, GLsizei count, const void *pointer){ TRACE("*"); UNIMPLEMENTED(); }
9772void APIENTRY glNormalPointerEXT(GLenum type, GLsizei stride, GLsizei count, const void *pointer){ TRACE("*"); UNIMPLEMENTED(); }
9773void APIENTRY glTexCoordPointerEXT(GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer){ TRACE("*"); UNIMPLEMENTED(); }
9774void APIENTRY glVertexPointerEXT(GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer){ TRACE("*"); UNIMPLEMENTED(); }
9775void APIENTRY glBeginConditionalRenderNV(GLuint id, GLenum mode){ TRACE("*"); UNIMPLEMENTED(); }
9776void APIENTRY glEndConditionalRenderNV(void){ TRACE("*"); UNIMPLEMENTED(); }
9777void APIENTRY glDepthRangedNV(GLdouble zNear, GLdouble zFar){ TRACE("*"); UNIMPLEMENTED(); }
9778void APIENTRY glClearDepthdNV(GLdouble depth){ TRACE("*"); UNIMPLEMENTED(); }
9779void APIENTRY glDepthBoundsdNV(GLdouble zmin, GLdouble zmax){ TRACE("*"); UNIMPLEMENTED(); }
9780void APIENTRY glGetMultisamplefvNV(GLenum pname, GLuint index, GLfloat *val){ TRACE("*"); UNIMPLEMENTED(); }
9781void APIENTRY glSampleMaskIndexedNV(GLuint index, GLbitfield mask){ TRACE("*"); UNIMPLEMENTED(); }
9782void APIENTRY glTexRenderbufferNV(GLenum target, GLuint renderbuffer){ TRACE("*"); UNIMPLEMENTED(); }
9783void APIENTRY glProgramNamedParameter4fNV(GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w){ TRACE("*"); UNIMPLEMENTED(); }
9784void APIENTRY glProgramNamedParameter4fvNV(GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v){ TRACE("*"); UNIMPLEMENTED(); }
9785void APIENTRY glProgramNamedParameter4dNV(GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w){ TRACE("*"); UNIMPLEMENTED(); }
9786void APIENTRY glProgramNamedParameter4dvNV(GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v){ TRACE("*"); UNIMPLEMENTED(); }
9787void APIENTRY glGetProgramNamedParameterfvNV(GLuint id, GLsizei len, const GLubyte *name, GLfloat *params){ TRACE("*"); UNIMPLEMENTED(); }
9788void APIENTRY glGetProgramNamedParameterdvNV(GLuint id, GLsizei len, const GLubyte *name, GLdouble *params){ TRACE("*"); UNIMPLEMENTED(); }
9789void APIENTRY glRenderbufferStorageMultisampleCoverageNV(GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height){ TRACE("*"); UNIMPLEMENTED(); }
9790void APIENTRY glProgramLocalParameterI4iNV(GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w){ TRACE("*"); UNIMPLEMENTED(); }
9791void APIENTRY glProgramLocalParameterI4ivNV(GLenum target, GLuint index, const GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9792void APIENTRY glProgramLocalParametersI4ivNV(GLenum target, GLuint index, GLsizei count, const GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9793void APIENTRY glProgramLocalParameterI4uiNV(GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w){ TRACE("*"); UNIMPLEMENTED(); }
9794void APIENTRY glProgramLocalParameterI4uivNV(GLenum target, GLuint index, const GLuint *params){ TRACE("*"); UNIMPLEMENTED(); }
9795void APIENTRY glProgramLocalParametersI4uivNV(GLenum target, GLuint index, GLsizei count, const GLuint *params){ TRACE("*"); UNIMPLEMENTED(); }
9796void APIENTRY glProgramEnvParameterI4iNV(GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w){ TRACE("*"); UNIMPLEMENTED(); }
9797void APIENTRY glProgramEnvParameterI4ivNV(GLenum target, GLuint index, const GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9798void APIENTRY glProgramEnvParametersI4ivNV(GLenum target, GLuint index, GLsizei count, const GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9799void APIENTRY glProgramEnvParameterI4uiNV(GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w){ TRACE("*"); UNIMPLEMENTED(); }
9800void APIENTRY glProgramEnvParameterI4uivNV(GLenum target, GLuint index, const GLuint *params){ TRACE("*"); UNIMPLEMENTED(); }
9801void APIENTRY glProgramEnvParametersI4uivNV(GLenum target, GLuint index, GLsizei count, const GLuint *params){ TRACE("*"); UNIMPLEMENTED(); }
9802void APIENTRY glGetProgramLocalParameterIivNV(GLenum target, GLuint index, GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9803void APIENTRY glGetProgramLocalParameterIuivNV(GLenum target, GLuint index, GLuint *params){ TRACE("*"); UNIMPLEMENTED(); }
9804void APIENTRY glGetProgramEnvParameterIivNV(GLenum target, GLuint index, GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9805void APIENTRY glGetProgramEnvParameterIuivNV(GLenum target, GLuint index, GLuint *params){ TRACE("*"); UNIMPLEMENTED(); }
9806void APIENTRY glVertex2hNV(GLhalfNV x, GLhalfNV y){ TRACE("*"); UNIMPLEMENTED(); }
9807void APIENTRY glVertex2hvNV(const GLhalfNV *v){ TRACE("*"); UNIMPLEMENTED(); }
9808void APIENTRY glVertex3hNV(GLhalfNV x, GLhalfNV y, GLhalfNV z){ TRACE("*"); UNIMPLEMENTED(); }
9809void APIENTRY glVertex3hvNV(const GLhalfNV *v){ TRACE("*"); UNIMPLEMENTED(); }
9810void APIENTRY glVertex4hNV(GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w){ TRACE("*"); UNIMPLEMENTED(); }
9811void APIENTRY glVertex4hvNV(const GLhalfNV *v){ TRACE("*"); UNIMPLEMENTED(); }
9812void APIENTRY glNormal3hNV(GLhalfNV nx, GLhalfNV ny, GLhalfNV nz){ TRACE("*"); UNIMPLEMENTED(); }
9813void APIENTRY glNormal3hvNV(const GLhalfNV *v){ TRACE("*"); UNIMPLEMENTED(); }
9814void APIENTRY glColor3hNV(GLhalfNV red, GLhalfNV green, GLhalfNV blue){ TRACE("*"); UNIMPLEMENTED(); }
9815void APIENTRY glColor3hvNV(const GLhalfNV *v){ TRACE("*"); UNIMPLEMENTED(); }
9816void APIENTRY glColor4hNV(GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha){ TRACE("*"); UNIMPLEMENTED(); }
9817void APIENTRY glColor4hvNV(const GLhalfNV *v){ TRACE("*"); UNIMPLEMENTED(); }
9818void APIENTRY glTexCoord1hNV(GLhalfNV s){ TRACE("*"); UNIMPLEMENTED(); }
9819void APIENTRY glTexCoord1hvNV(const GLhalfNV *v){ TRACE("*"); UNIMPLEMENTED(); }
9820void APIENTRY glTexCoord2hNV(GLhalfNV s, GLhalfNV t){ TRACE("*"); UNIMPLEMENTED(); }
9821void APIENTRY glTexCoord2hvNV(const GLhalfNV *v){ TRACE("*"); UNIMPLEMENTED(); }
9822void APIENTRY glTexCoord3hNV(GLhalfNV s, GLhalfNV t, GLhalfNV r){ TRACE("*"); UNIMPLEMENTED(); }
9823void APIENTRY glTexCoord3hvNV(const GLhalfNV *v){ TRACE("*"); UNIMPLEMENTED(); }
9824void APIENTRY glTexCoord4hNV(GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q){ TRACE("*"); UNIMPLEMENTED(); }
9825void APIENTRY glTexCoord4hvNV(const GLhalfNV *v){ TRACE("*"); UNIMPLEMENTED(); }
9826void APIENTRY glMultiTexCoord1hNV(GLenum target, GLhalfNV s){ TRACE("*"); UNIMPLEMENTED(); }
9827void APIENTRY glMultiTexCoord1hvNV(GLenum target, const GLhalfNV *v){ TRACE("*"); UNIMPLEMENTED(); }
9828void APIENTRY glMultiTexCoord2hNV(GLenum target, GLhalfNV s, GLhalfNV t){ TRACE("*"); UNIMPLEMENTED(); }
9829void APIENTRY glMultiTexCoord2hvNV(GLenum target, const GLhalfNV *v){ TRACE("*"); UNIMPLEMENTED(); }
9830void APIENTRY glMultiTexCoord3hNV(GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r){ TRACE("*"); UNIMPLEMENTED(); }
9831void APIENTRY glMultiTexCoord3hvNV(GLenum target, const GLhalfNV *v){ TRACE("*"); UNIMPLEMENTED(); }
9832void APIENTRY glMultiTexCoord4hNV(GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q){ TRACE("*"); UNIMPLEMENTED(); }
9833void APIENTRY glMultiTexCoord4hvNV(GLenum target, const GLhalfNV *v){ TRACE("*"); UNIMPLEMENTED(); }
9834void APIENTRY glFogCoordhNV(GLhalfNV fog){ TRACE("*"); UNIMPLEMENTED(); }
9835void APIENTRY glFogCoordhvNV(const GLhalfNV *fog){ TRACE("*"); UNIMPLEMENTED(); }
9836void APIENTRY glSecondaryColor3hNV(GLhalfNV red, GLhalfNV green, GLhalfNV blue){ TRACE("*"); UNIMPLEMENTED(); }
9837void APIENTRY glSecondaryColor3hvNV(const GLhalfNV *v){ TRACE("*"); UNIMPLEMENTED(); }
9838void APIENTRY glVertexWeighthNV(GLhalfNV weight){ TRACE("*"); UNIMPLEMENTED(); }
9839void APIENTRY glVertexWeighthvNV(const GLhalfNV *weight){ TRACE("*"); UNIMPLEMENTED(); }
9840void APIENTRY glVertexAttrib1hNV(GLuint index, GLhalfNV x){ TRACE("*"); UNIMPLEMENTED(); }
9841void APIENTRY glVertexAttrib1hvNV(GLuint index, const GLhalfNV *v){ TRACE("*"); UNIMPLEMENTED(); }
9842void APIENTRY glVertexAttrib2hNV(GLuint index, GLhalfNV x, GLhalfNV y){ TRACE("*"); UNIMPLEMENTED(); }
9843void APIENTRY glVertexAttrib2hvNV(GLuint index, const GLhalfNV *v){ TRACE("*"); UNIMPLEMENTED(); }
9844void APIENTRY glVertexAttrib3hNV(GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z){ TRACE("*"); UNIMPLEMENTED(); }
9845void APIENTRY glVertexAttrib3hvNV(GLuint index, const GLhalfNV *v){ TRACE("*"); UNIMPLEMENTED(); }
9846void APIENTRY glVertexAttrib4hNV(GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w){ TRACE("*"); UNIMPLEMENTED(); }
9847void APIENTRY glVertexAttrib4hvNV(GLuint index, const GLhalfNV *v){ TRACE("*"); UNIMPLEMENTED(); }
9848void APIENTRY glVertexAttribs1hvNV(GLuint index, GLsizei n, const GLhalfNV *v){ TRACE("*"); UNIMPLEMENTED(); }
9849void APIENTRY glVertexAttribs2hvNV(GLuint index, GLsizei n, const GLhalfNV *v){ TRACE("*"); UNIMPLEMENTED(); }
9850void APIENTRY glVertexAttribs3hvNV(GLuint index, GLsizei n, const GLhalfNV *v){ TRACE("*"); UNIMPLEMENTED(); }
9851void APIENTRY glVertexAttribs4hvNV(GLuint index, GLsizei n, const GLhalfNV *v){ TRACE("*"); UNIMPLEMENTED(); }
9852void APIENTRY glBeginOcclusionQueryNV(GLuint id){ TRACE("*"); UNIMPLEMENTED(); }
9853void APIENTRY glEndOcclusionQueryNV(void){ TRACE("*"); UNIMPLEMENTED(); }
9854void APIENTRY glGetOcclusionQueryivNV(GLuint id, GLenum pname, GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9855void APIENTRY glGetOcclusionQueryuivNV(GLuint id, GLenum pname, GLuint *params){ TRACE("*"); UNIMPLEMENTED(); }
9856void APIENTRY glGenOcclusionQueriesNV(GLsizei n, GLuint *ids){ TRACE("*"); UNIMPLEMENTED(); }
9857void APIENTRY glDeleteOcclusionQueriesNV(GLsizei n, const GLuint *ids){ TRACE("*"); UNIMPLEMENTED(); }
9858GLboolean APIENTRY glIsOcclusionQueryNV(GLuint id){ TRACE("*"); UNIMPLEMENTED(); return 0; }
9859void APIENTRY glProgramBufferParametersfvNV(GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLfloat *params){ TRACE("*"); UNIMPLEMENTED(); }
9860void APIENTRY glProgramBufferParametersIivNV(GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9861void APIENTRY glProgramBufferParametersIuivNV(GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLuint *params){ TRACE("*"); UNIMPLEMENTED(); }
9862void APIENTRY glPixelDataRangeNV(GLenum target, GLsizei length, const void *pointer){ TRACE("*"); UNIMPLEMENTED(); }
9863void APIENTRY glFlushPixelDataRangeNV(GLenum target){ TRACE("*"); UNIMPLEMENTED(); }
9864void APIENTRY glPointParameteriNV(GLenum pname, GLint param){ TRACE("*"); UNIMPLEMENTED(); }
9865void APIENTRY glPointParameterivNV(GLenum pname, const GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9866void APIENTRY glPrimitiveRestartNV(void){ TRACE("*"); UNIMPLEMENTED(); }
9867void APIENTRY glPrimitiveRestartIndexNV(GLuint index){ TRACE("*"); UNIMPLEMENTED(); }
9868void APIENTRY glCombinerParameterfvNV(GLenum pname, const GLfloat *params){ TRACE("*"); UNIMPLEMENTED(); }
9869void APIENTRY glCombinerParameterfNV(GLenum pname, GLfloat param){ TRACE("*"); UNIMPLEMENTED(); }
9870void APIENTRY glCombinerParameterivNV(GLenum pname, const GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9871void APIENTRY glCombinerParameteriNV(GLenum pname, GLint param){ TRACE("*"); UNIMPLEMENTED(); }
9872void APIENTRY glCombinerInputNV(GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage){ TRACE("*"); UNIMPLEMENTED(); }
9873void APIENTRY glCombinerOutputNV(GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum){ TRACE("*"); UNIMPLEMENTED(); }
9874void APIENTRY glFinalCombinerInputNV(GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage){ TRACE("*"); UNIMPLEMENTED(); }
9875void APIENTRY glGetCombinerInputParameterfvNV(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params){ TRACE("*"); UNIMPLEMENTED(); }
9876void APIENTRY glGetCombinerInputParameterivNV(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9877void APIENTRY glGetCombinerOutputParameterfvNV(GLenum stage, GLenum portion, GLenum pname, GLfloat *params){ TRACE("*"); UNIMPLEMENTED(); }
9878void APIENTRY glGetCombinerOutputParameterivNV(GLenum stage, GLenum portion, GLenum pname, GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9879void APIENTRY glGetFinalCombinerInputParameterfvNV(GLenum variable, GLenum pname, GLfloat *params){ TRACE("*"); UNIMPLEMENTED(); }
9880void APIENTRY glGetFinalCombinerInputParameterivNV(GLenum variable, GLenum pname, GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9881void APIENTRY glCombinerStageParameterfvNV(GLenum stage, GLenum pname, const GLfloat *params){ TRACE("*"); UNIMPLEMENTED(); }
9882void APIENTRY glGetCombinerStageParameterfvNV(GLenum stage, GLenum pname, GLfloat *params){ TRACE("*"); UNIMPLEMENTED(); }
9883void APIENTRY glMakeBufferResidentNV(GLenum target, GLenum access){ TRACE("*"); UNIMPLEMENTED(); }
9884void APIENTRY glMakeBufferNonResidentNV(GLenum target){ TRACE("*"); UNIMPLEMENTED(); }
9885GLboolean APIENTRY glIsBufferResidentNV(GLenum target){ TRACE("*"); UNIMPLEMENTED(); return 0; }
9886void APIENTRY glMakeNamedBufferResidentNV(GLuint buffer, GLenum access){ TRACE("*"); UNIMPLEMENTED(); }
9887void APIENTRY glMakeNamedBufferNonResidentNV(GLuint buffer){ TRACE("*"); UNIMPLEMENTED(); }
9888GLboolean APIENTRY glIsNamedBufferResidentNV(GLuint buffer){ TRACE("*"); UNIMPLEMENTED(); return 0; }
9889void APIENTRY glGetBufferParameterui64vNV(GLenum target, GLenum pname, GLuint64EXT *params){ TRACE("*"); UNIMPLEMENTED(); }
9890void APIENTRY glGetNamedBufferParameterui64vNV(GLuint buffer, GLenum pname, GLuint64EXT *params){ TRACE("*"); UNIMPLEMENTED(); }
9891void APIENTRY glGetIntegerui64vNV(GLenum value, GLuint64EXT *result){ TRACE("*"); UNIMPLEMENTED(); }
9892void APIENTRY glUniformui64NV(GLint location, GLuint64EXT value){ TRACE("*"); UNIMPLEMENTED(); }
9893void APIENTRY glUniformui64vNV(GLint location, GLsizei count, const GLuint64EXT *value){ TRACE("*"); UNIMPLEMENTED(); }
9894void APIENTRY glGetUniformui64vNV(GLuint program, GLint location, GLuint64EXT *params){ TRACE("*"); UNIMPLEMENTED(); }
9895void APIENTRY glProgramUniformui64NV(GLuint program, GLint location, GLuint64EXT value){ TRACE("*"); UNIMPLEMENTED(); }
9896void APIENTRY glProgramUniformui64vNV(GLuint program, GLint location, GLsizei count, const GLuint64EXT *value){ TRACE("*"); UNIMPLEMENTED(); }
9897void APIENTRY glBeginTransformFeedbackNV(GLenum primitiveMode){ TRACE("*"); UNIMPLEMENTED(); }
9898void APIENTRY glEndTransformFeedbackNV(void){ TRACE("*"); UNIMPLEMENTED(); }
9899void APIENTRY glTransformFeedbackAttribsNV(GLuint count, const GLint *attribs, GLenum bufferMode){ TRACE("*"); UNIMPLEMENTED(); }
9900void APIENTRY glBindBufferRangeNV(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size){ TRACE("*"); UNIMPLEMENTED(); }
9901void APIENTRY glBindBufferOffsetNV(GLenum target, GLuint index, GLuint buffer, GLintptr offset){ TRACE("*"); UNIMPLEMENTED(); }
9902void APIENTRY glBindBufferBaseNV(GLenum target, GLuint index, GLuint buffer){ TRACE("*"); UNIMPLEMENTED(); }
9903void APIENTRY glTransformFeedbackVaryingsNV(GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode){ TRACE("*"); UNIMPLEMENTED(); }
9904void APIENTRY glActiveVaryingNV(GLuint program, const GLchar *name){ TRACE("*"); UNIMPLEMENTED(); }
9905GLint APIENTRY glGetVaryingLocationNV(GLuint program, const GLchar *name){ TRACE("*"); UNIMPLEMENTED(); return 0; }
9906void APIENTRY glGetActiveVaryingNV(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name){ TRACE("*"); UNIMPLEMENTED(); }
9907void APIENTRY glGetTransformFeedbackVaryingNV(GLuint program, GLuint index, GLint *location){ TRACE("*"); UNIMPLEMENTED(); }
9908void APIENTRY glTransformFeedbackStreamAttribsNV(GLsizei count, const GLint *attribs, GLsizei nbuffers, const GLint *bufstreams, GLenum bufferMode){ TRACE("*"); UNIMPLEMENTED(); }
9909void APIENTRY glFlushVertexArrayRangeNV(void){ TRACE("*"); UNIMPLEMENTED(); }
9910void APIENTRY glVertexArrayRangeNV(GLsizei length, const void *pointer){ TRACE("*"); UNIMPLEMENTED(); }
9911void APIENTRY glBufferAddressRangeNV(GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length){ TRACE("*"); UNIMPLEMENTED(); }
9912void APIENTRY glVertexFormatNV(GLint size, GLenum type, GLsizei stride){ TRACE("*"); UNIMPLEMENTED(); }
9913void APIENTRY glNormalFormatNV(GLenum type, GLsizei stride){ TRACE("*"); UNIMPLEMENTED(); }
9914void APIENTRY glColorFormatNV(GLint size, GLenum type, GLsizei stride){ TRACE("*"); UNIMPLEMENTED(); }
9915void APIENTRY glIndexFormatNV(GLenum type, GLsizei stride){ TRACE("*"); UNIMPLEMENTED(); }
9916void APIENTRY glTexCoordFormatNV(GLint size, GLenum type, GLsizei stride){ TRACE("*"); UNIMPLEMENTED(); }
9917void APIENTRY glEdgeFlagFormatNV(GLsizei stride){ TRACE("*"); UNIMPLEMENTED(); }
9918void APIENTRY glSecondaryColorFormatNV(GLint size, GLenum type, GLsizei stride){ TRACE("*"); UNIMPLEMENTED(); }
9919void APIENTRY glFogCoordFormatNV(GLenum type, GLsizei stride){ TRACE("*"); UNIMPLEMENTED(); }
9920void APIENTRY glVertexAttribFormatNV(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride){ TRACE("*"); UNIMPLEMENTED(); }
9921void APIENTRY glVertexAttribIFormatNV(GLuint index, GLint size, GLenum type, GLsizei stride){ TRACE("*"); UNIMPLEMENTED(); }
9922void APIENTRY glGetIntegerui64i_vNV(GLenum value, GLuint index, GLuint64EXT *result){ TRACE("*"); UNIMPLEMENTED(); }
9923GLboolean APIENTRY glAreProgramsResidentNV(GLsizei n, const GLuint *programs, GLboolean *residences){ TRACE("*"); UNIMPLEMENTED(); return 0; }
9924void APIENTRY glBindProgramNV(GLenum target, GLuint id){ TRACE("*"); UNIMPLEMENTED(); }
9925void APIENTRY glDeleteProgramsNV(GLsizei n, const GLuint *programs){ TRACE("*"); UNIMPLEMENTED(); }
9926void APIENTRY glExecuteProgramNV(GLenum target, GLuint id, const GLfloat *params){ TRACE("*"); UNIMPLEMENTED(); }
9927void APIENTRY glGenProgramsNV(GLsizei n, GLuint *programs){ TRACE("*"); UNIMPLEMENTED(); }
9928void APIENTRY glGetProgramParameterdvNV(GLenum target, GLuint index, GLenum pname, GLdouble *params){ TRACE("*"); UNIMPLEMENTED(); }
9929void APIENTRY glGetProgramParameterfvNV(GLenum target, GLuint index, GLenum pname, GLfloat *params){ TRACE("*"); UNIMPLEMENTED(); }
9930void APIENTRY glGetProgramivNV(GLuint id, GLenum pname, GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9931void APIENTRY glGetProgramStringNV(GLuint id, GLenum pname, GLubyte *program){ TRACE("*"); UNIMPLEMENTED(); }
9932void APIENTRY glGetTrackMatrixivNV(GLenum target, GLuint address, GLenum pname, GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9933void APIENTRY glGetVertexAttribdvNV(GLuint index, GLenum pname, GLdouble *params){ TRACE("*"); UNIMPLEMENTED(); }
9934void APIENTRY glGetVertexAttribfvNV(GLuint index, GLenum pname, GLfloat *params){ TRACE("*"); UNIMPLEMENTED(); }
9935void APIENTRY glGetVertexAttribivNV(GLuint index, GLenum pname, GLint *params){ TRACE("*"); UNIMPLEMENTED(); }
9936void APIENTRY glGetVertexAttribPointervNV(GLuint index, GLenum pname, void **pointer){ TRACE("*"); UNIMPLEMENTED(); }
9937GLboolean APIENTRY glIsProgramNV(GLuint id){ TRACE("*"); UNIMPLEMENTED(); return 0; }
9938void APIENTRY glLoadProgramNV(GLenum target, GLuint id, GLsizei len, const GLubyte *program){ TRACE("*"); UNIMPLEMENTED(); }
9939void APIENTRY glProgramParameter4dNV(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w){ TRACE("*"); UNIMPLEMENTED(); }
9940void APIENTRY glProgramParameter4dvNV(GLenum target, GLuint index, const GLdouble *v){ TRACE("*"); UNIMPLEMENTED(); }
9941void APIENTRY glProgramParameter4fNV(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w){ TRACE("*"); UNIMPLEMENTED(); }
9942void APIENTRY glProgramParameter4fvNV(GLenum target, GLuint index, const GLfloat *v){ TRACE("*"); UNIMPLEMENTED(); }
9943void APIENTRY glProgramParameters4dvNV(GLenum target, GLuint index, GLsizei count, const GLdouble *v){ TRACE("*"); UNIMPLEMENTED(); }
9944void APIENTRY glProgramParameters4fvNV(GLenum target, GLuint index, GLsizei count, const GLfloat *v){ TRACE("*"); UNIMPLEMENTED(); }
9945void APIENTRY glRequestResidentProgramsNV(GLsizei n, const GLuint *programs){ TRACE("*"); UNIMPLEMENTED(); }
9946void APIENTRY glTrackMatrixNV(GLenum target, GLuint address, GLenum matrix, GLenum transform){ TRACE("*"); UNIMPLEMENTED(); }
9947void APIENTRY glVertexAttribPointerNV(GLuint index, GLint fsize, GLenum type, GLsizei stride, const void *pointer){ TRACE("*"); UNIMPLEMENTED(); }
9948void APIENTRY glVertexAttrib1dNV(GLuint index, GLdouble x){ TRACE("*"); UNIMPLEMENTED(); }
9949void APIENTRY glVertexAttrib1dvNV(GLuint index, const GLdouble *v){ TRACE("*"); UNIMPLEMENTED(); }
9950void APIENTRY glVertexAttrib1fNV(GLuint index, GLfloat x){ TRACE("*"); UNIMPLEMENTED(); }
9951void APIENTRY glVertexAttrib1fvNV(GLuint index, const GLfloat *v){ TRACE("*"); UNIMPLEMENTED(); }
9952void APIENTRY glVertexAttrib1sNV(GLuint index, GLshort x){ TRACE("*"); UNIMPLEMENTED(); }
9953void APIENTRY glVertexAttrib1svNV(GLuint index, const GLshort *v){ TRACE("*"); UNIMPLEMENTED(); }
9954void APIENTRY glVertexAttrib2dNV(GLuint index, GLdouble x, GLdouble y){ TRACE("*"); UNIMPLEMENTED(); }
9955void APIENTRY glVertexAttrib2dvNV(GLuint index, const GLdouble *v){ TRACE("*"); UNIMPLEMENTED(); }
9956void APIENTRY glVertexAttrib2fNV(GLuint index, GLfloat x, GLfloat y){ TRACE("*"); UNIMPLEMENTED(); }
9957void APIENTRY glVertexAttrib2fvNV(GLuint index, const GLfloat *v){ TRACE("*"); UNIMPLEMENTED(); }
9958void APIENTRY glVertexAttrib2sNV(GLuint index, GLshort x, GLshort y){ TRACE("*"); UNIMPLEMENTED(); }
9959void APIENTRY glVertexAttrib2svNV(GLuint index, const GLshort *v){ TRACE("*"); UNIMPLEMENTED(); }
9960void APIENTRY glVertexAttrib3dNV(GLuint index, GLdouble x, GLdouble y, GLdouble z){ TRACE("*"); UNIMPLEMENTED(); }
9961void APIENTRY glVertexAttrib3dvNV(GLuint index, const GLdouble *v){ TRACE("*"); UNIMPLEMENTED(); }
9962void APIENTRY glVertexAttrib3fNV(GLuint index, GLfloat x, GLfloat y, GLfloat z){ TRACE("*"); UNIMPLEMENTED(); }
9963void APIENTRY glVertexAttrib3fvNV(GLuint index, const GLfloat *v){ TRACE("*"); UNIMPLEMENTED(); }
9964void APIENTRY glVertexAttrib3sNV(GLuint index, GLshort x, GLshort y, GLshort z){ TRACE("*"); UNIMPLEMENTED(); }
9965void APIENTRY glVertexAttrib3svNV(GLuint index, const GLshort *v){ TRACE("*"); UNIMPLEMENTED(); }
9966void APIENTRY glVertexAttrib4dNV(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w){ TRACE("*"); UNIMPLEMENTED(); }
9967void APIENTRY glVertexAttrib4dvNV(GLuint index, const GLdouble *v){ TRACE("*"); UNIMPLEMENTED(); }
9968void APIENTRY glVertexAttrib4fNV(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w){ TRACE("*"); UNIMPLEMENTED(); }
9969void APIENTRY glVertexAttrib4fvNV(GLuint index, const GLfloat *v){ TRACE("*"); UNIMPLEMENTED(); }
9970void APIENTRY glVertexAttrib4sNV(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w){ TRACE("*"); UNIMPLEMENTED(); }
9971void APIENTRY glVertexAttrib4svNV(GLuint index, const GLshort *v){ TRACE("*"); UNIMPLEMENTED(); }
9972void APIENTRY glVertexAttrib4ubNV(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w){ TRACE("*"); UNIMPLEMENTED(); }
9973void APIENTRY glVertexAttrib4ubvNV(GLuint index, const GLubyte *v){ TRACE("*"); UNIMPLEMENTED(); }
9974void APIENTRY glVertexAttribs1dvNV(GLuint index, GLsizei count, const GLdouble *v){ TRACE("*"); UNIMPLEMENTED(); }
9975void APIENTRY glVertexAttribs1fvNV(GLuint index, GLsizei count, const GLfloat *v){ TRACE("*"); UNIMPLEMENTED(); }
9976void APIENTRY glVertexAttribs1svNV(GLuint index, GLsizei count, const GLshort *v){ TRACE("*"); UNIMPLEMENTED(); }
9977void APIENTRY glVertexAttribs2dvNV(GLuint index, GLsizei count, const GLdouble *v){ TRACE("*"); UNIMPLEMENTED(); }
9978void APIENTRY glVertexAttribs2fvNV(GLuint index, GLsizei count, const GLfloat *v){ TRACE("*"); UNIMPLEMENTED(); }
9979void APIENTRY glVertexAttribs2svNV(GLuint index, GLsizei count, const GLshort *v){ TRACE("*"); UNIMPLEMENTED(); }
9980void APIENTRY glVertexAttribs3dvNV(GLuint index, GLsizei count, const GLdouble *v){ TRACE("*"); UNIMPLEMENTED(); }
9981void APIENTRY glVertexAttribs3fvNV(GLuint index, GLsizei count, const GLfloat *v){ TRACE("*"); UNIMPLEMENTED(); }
9982void APIENTRY glVertexAttribs3svNV(GLuint index, GLsizei count, const GLshort *v){ TRACE("*"); UNIMPLEMENTED(); }
9983void APIENTRY glVertexAttribs4dvNV(GLuint index, GLsizei count, const GLdouble *v){ TRACE("*"); UNIMPLEMENTED(); }
9984void APIENTRY glVertexAttribs4fvNV(GLuint index, GLsizei count, const GLfloat *v){ TRACE("*"); UNIMPLEMENTED(); }
9985void APIENTRY glVertexAttribs4svNV(GLuint index, GLsizei count, const GLshort *v){ TRACE("*"); UNIMPLEMENTED(); }
9986void APIENTRY glVertexAttribs4ubvNV(GLuint index, GLsizei count, const GLubyte *v){ TRACE("*"); UNIMPLEMENTED(); }
9987
9988GLboolean APIENTRY wgl1fx34c0da()
9989{
9990 return -1;// UNIMPLEMENTED();
9991}
Nicolas Capensa9b49372015-01-30 00:33:26 -05009992
9993BOOL WINAPI wglSwapIntervalEXT(int interval)
9994{
9995 gl::Surface *drawSurface = static_cast<gl::Surface*>(gl::getCurrentDrawSurface());
9996
9997 if(drawSurface)
9998 {
9999 drawSurface->setSwapInterval(interval);
10000 return TRUE;
10001 }
Maxime Grégoire20942c02015-07-16 14:12:47 -040010002
Nicolas Capensa9b49372015-01-30 00:33:26 -050010003 SetLastError(ERROR_DC_NOT_FOUND);
10004 return FALSE;
10005}
10006
Maxime Grégoire20942c02015-07-16 14:12:47 -040010007int WINAPI wglGetSwapIntervalEXT(void)
10008{
10009 TRACE("(*)");
10010 UNIMPLEMENTED();
10011 return 1;
10012}
10013
Nicolas Capensa9b49372015-01-30 00:33:26 -050010014int WINAPI wglChoosePixelFormat(HDC hdc, const PIXELFORMATDESCRIPTOR *ppfd)
10015{
10016 TRACE("(*)");
10017
10018 return 1;
10019}
10020
10021BOOL WINAPI wglCopyContext(HGLRC, HGLRC, UINT)
10022{
10023 UNIMPLEMENTED();
10024 return FALSE;
10025}
10026
10027HGLRC WINAPI wglCreateContext(HDC hdc)
10028{
10029 TRACE("(*)");
10030
10031 gl::Display *display = gl::Display::getDisplay(hdc);
10032 display->initialize();
10033
10034 gl::Context *context = display->createContext(nullptr);
10035
10036 return (HGLRC)context;
10037}
10038
10039HGLRC WINAPI wglCreateLayerContext(HDC, int)
10040{
10041 UNIMPLEMENTED();
10042 return 0;
10043}
10044
10045BOOL WINAPI wglDeleteContext(HGLRC context)
10046{
10047 gl::Display *display = gl::getDisplay();
10048
10049 if(display && context)
10050 {
10051 display->destroyContext(reinterpret_cast<gl::Context*>(context));
10052
10053 return TRUE;
10054 }
10055
Maxime Grégoire20942c02015-07-16 14:12:47 -040010056 return TRUE;// FALSE;
Nicolas Capensa9b49372015-01-30 00:33:26 -050010057}
10058
10059BOOL WINAPI wglDescribeLayerPlane(HDC, int, int, UINT, LPLAYERPLANEDESCRIPTOR)
10060{
10061 UNIMPLEMENTED();
10062 return FALSE;
10063}
10064
Maxime Grégoire20942c02015-07-16 14:12:47 -040010065
10066
10067void APIENTRY glVertexAttrib4bv(GLuint index, const GLbyte *v)
10068{
10069 TRACE("*");
10070 UNIMPLEMENTED();
10071}
10072void APIENTRY glVertexAttrib4iv(GLuint index, const GLint *v)
10073{
10074 TRACE("*");
10075 UNIMPLEMENTED();
10076}
10077void APIENTRY glVertexAttrib4sv(GLuint index, const GLshort *v)
10078{
10079 TRACE("*");
10080 UNIMPLEMENTED();
10081}
10082void APIENTRY glVertexAttrib4ubv(GLuint index, const GLubyte *v)
10083{
10084 TRACE("*");
10085 UNIMPLEMENTED();
10086}
10087void APIENTRY glVertexAttrib4uiv(GLuint index, const GLuint *v)
10088{
10089 TRACE("*");
10090 UNIMPLEMENTED();
10091}
10092void APIENTRY glVertexAttrib4usv(GLuint index, const GLushort *v)
10093{
10094 TRACE("*");
10095 UNIMPLEMENTED();
10096}
10097
10098
Nicolas Capensa9b49372015-01-30 00:33:26 -050010099int WINAPI wglDescribePixelFormat(HDC hdc, int iPixelFormat, UINT nBytes, LPPIXELFORMATDESCRIPTOR ppfd)
10100{
10101 TRACE("(*)");
10102
10103 ASSERT(nBytes == sizeof(PIXELFORMATDESCRIPTOR)); // FIXME
10104
10105 ppfd->nSize = sizeof(PIXELFORMATDESCRIPTOR);
10106 ppfd->nVersion = 1;
10107 ppfd->dwFlags = PFD_DRAW_TO_WINDOW | PFD_DRAW_TO_BITMAP | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
10108 ppfd->iPixelType = PFD_TYPE_RGBA;
10109 ppfd->cColorBits = 32;
10110 ppfd->cRedBits = 8;
10111 ppfd->cRedShift = 16;
10112 ppfd->cGreenBits = 8;
10113 ppfd->cGreenShift = 8;
10114 ppfd->cBlueBits = 8;
10115 ppfd->cBlueShift = 0;
10116 ppfd->cAlphaBits = 0;
10117 ppfd->cAlphaShift = 24;
10118 ppfd->cAccumBits = 0;
10119 ppfd->cAccumRedBits = 0;
10120 ppfd->cAccumGreenBits = 0;
10121 ppfd->cAccumBlueBits = 0;
10122 ppfd->cAccumAlphaBits = 0;
10123 ppfd->cDepthBits = 24;
10124 ppfd->cStencilBits = 0;
10125 ppfd->cAuxBuffers = 0;
10126 ppfd->iLayerType = 0;
10127 ppfd->bReserved = 0;
10128 ppfd->dwLayerMask = 0;
10129 ppfd->dwVisibleMask = 0;
10130 ppfd->dwDamageMask = 0;
10131
10132 return 1;
10133}
10134
10135HGLRC WINAPI wglGetCurrentContext(VOID)
10136{
10137 TRACE("(*)");
10138 return (HGLRC)gl::getContext();
10139}
10140
10141HDC WINAPI wglGetCurrentDC(VOID)
10142{
10143 TRACE("(*)");
10144 gl::Display *display = gl::getDisplay();
10145 return display ? display->getNativeDisplay() : 0;
10146}
10147
10148void WINAPI wglGetDefaultProcAddress()
10149{
10150 UNIMPLEMENTED();
10151}
10152
10153int WINAPI wglGetLayerPaletteEntries(HDC, int, int, int, COLORREF*)
10154{
10155 UNIMPLEMENTED();
10156 return 0;
10157}
10158
10159void WINAPI wglGetPixelFormat()
10160{
10161 UNIMPLEMENTED();
10162}
10163
10164const char *WINAPI wglGetExtensionsStringARB(HDC hdc)
10165{
10166 TRACE("(*)");
10167
Maxime Grégoire20942c02015-07-16 14:12:47 -040010168 return "GL_ARB_texture_non_power_of_two "
10169 "GL_ARB_framebuffer_object "
10170 "GL_ARB_fragment_shader "
10171 "GL_ARB_vertex_shader "
10172 "GL_ARB_shader_objects "
10173 "GL_ARB_shading_language_100 "
10174 "GL_EXT_framebuffer_object";
10175 //"wglCreateContextAttribsARB";
10176 //NVIDIA CARD
10177 "WGL_ARB_buffer_region WGL_ARB_create_context WGL_ARB_create_context_profile WGL_ARB_create_context_robustness WGL_ARB_context_flush_control WGL_ARB_extensions_string WGL_ARB_make_current_read WGL_ARB_multisample WGL_ARB_pbuffer WGL_ARB_pixel_format WGL_ARB_pixel_format_float WGL_ARB_render_texture WGL_ATI_pixel_format_float WGL_EXT_create_context_es_profile WGL_EXT_create_context_es2_profile WGL_EXT_extensions_string WGL_EXT_framebuffer_sRGB WGL_EXT_pixel_format_packed_float WGL_EXT_swap_control WGL_EXT_swap_control_tear WGL_NVX_DX_interop WGL_NV_DX_interop WGL_NV_DX_interop2 WGL_NV_copy_image WGL_NV_delay_before_swap WGL_NV_float_buffer WGL_NV_gpu_affinity WGL_NV_multisample_coverage WGL_NV_render_depth_texture WGL_NV_render_texture_rectangle WGL_NV_swap_group WGL_NV_video_capture";
Nicolas Capensa9b49372015-01-30 00:33:26 -050010178}
10179
10180const char *WINAPI wglGetExtensionsStringEXT()
10181{
10182 TRACE("(*)");
10183 return wglGetExtensionsStringARB(0);
10184}
10185
10186PROC WINAPI wglGetProcAddress(LPCSTR lpszProc)
10187{
10188 TRACE("(LPCSTR lpszProc = \"%s\")", lpszProc);
10189
Nicolas Capens264f1522015-01-09 17:21:17 -050010190 struct Extension
10191 {
10192 const char *name;
Nicolas Capensa9b49372015-01-30 00:33:26 -050010193 PROC address;
Nicolas Capens264f1522015-01-09 17:21:17 -050010194 };
10195
10196 static const Extension glExtensions[] =
10197 {
Maxime Grégoire20942c02015-07-16 14:12:47 -040010198#define EXT(function) {#function, (PROC)function}
10199
Nicolas Capensa9b49372015-01-30 00:33:26 -050010200 // Core 2.1
10201 EXT(glDrawRangeElements),
10202 EXT(glTexImage3D),
10203 EXT(glTexSubImage3D),
10204 EXT(glCopyTexSubImage3D),
10205 EXT(glActiveTexture),
10206 EXT(glClientActiveTexture),
10207 EXT(glCompressedTexImage1D),
10208 EXT(glCompressedTexImage2D),
10209 EXT(glCompressedTexImage3D),
10210 EXT(glCompressedTexSubImage1D),
10211 EXT(glCompressedTexSubImage2D),
10212 EXT(glCompressedTexSubImage3D),
10213 EXT(glGetCompressedTexImage),
10214 EXT(glMultiTexCoord1f),
10215 EXT(glMultiTexCoord1d),
10216 EXT(glMultiTexCoord2f),
10217 EXT(glMultiTexCoord2d),
10218 EXT(glMultiTexCoord3f),
10219 EXT(glMultiTexCoord3d),
10220 EXT(glMultiTexCoord4f),
10221 EXT(glMultiTexCoord4d),
10222 EXT(glLoadTransposeMatrixf),
10223 EXT(glLoadTransposeMatrixd),
10224 EXT(glMultTransposeMatrixf),
10225 EXT(glMultTransposeMatrixd),
10226 EXT(glSampleCoverage),
10227 EXT(glBlendEquation),
10228 EXT(glBlendColor),
10229 EXT(glFogCoordf),
10230 EXT(glFogCoordd),
10231 EXT(glFogCoordPointer),
10232 EXT(glMultiDrawArrays),
10233 EXT(glPointParameteri),
10234 EXT(glPointParameterf),
10235 EXT(glPointParameteriv),
10236 EXT(glPointParameterfv),
10237 EXT(glSecondaryColor3b),
10238 EXT(glSecondaryColor3f),
10239 EXT(glSecondaryColor3d),
10240 EXT(glSecondaryColor3ub),
10241 EXT(glSecondaryColorPointer),
10242 EXT(glBlendFuncSeparate),
10243 EXT(glWindowPos2f),
10244 EXT(glWindowPos2d),
10245 EXT(glWindowPos2i),
10246 EXT(glWindowPos3f),
10247 EXT(glWindowPos3d),
10248 EXT(glWindowPos3i),
10249 EXT(glBindBuffer),
10250 EXT(glDeleteBuffers),
10251 EXT(glGenBuffers),
10252 EXT(glIsBuffer),
10253 EXT(glBufferData),
10254 EXT(glBufferSubData),
10255 EXT(glGetBufferSubData),
10256 EXT(glMapBuffer),
10257 EXT(glUnmapBuffer),
10258 EXT(glGetBufferParameteriv),
10259 EXT(glGetBufferPointerv),
10260 EXT(glGenQueries),
10261 EXT(glDeleteQueries),
10262 EXT(glIsQuery),
10263 EXT(glBeginQuery),
10264 EXT(glEndQuery),
10265 EXT(glGetQueryiv),
10266 EXT(glGetQueryObjectiv),
10267 EXT(glGetQueryObjectuiv),
10268 EXT(glShaderSource),
10269 EXT(glCreateShader),
10270 EXT(glIsShader),
10271 EXT(glCompileShader),
10272 EXT(glDeleteShader),
10273 EXT(glCreateProgram),
10274 EXT(glIsProgram),
10275 EXT(glAttachShader),
10276 EXT(glDetachShader),
10277 EXT(glLinkProgram),
10278 EXT(glUseProgram),
10279 EXT(glValidateProgram),
10280 EXT(glDeleteProgram),
10281 EXT(glUniform1f),
10282 EXT(glUniform2f),
10283 EXT(glUniform3f),
10284 EXT(glUniform4f),
10285 EXT(glUniform1i),
10286 EXT(glUniform2i),
10287 EXT(glUniform3i),
10288 EXT(glUniform4i),
10289 EXT(glUniform1fv),
10290 EXT(glUniform2fv),
10291 EXT(glUniform3fv),
10292 EXT(glUniform4fv),
10293 EXT(glUniform1iv),
10294 EXT(glUniform2iv),
10295 EXT(glUniform3iv),
10296 EXT(glUniform4iv),
10297 EXT(glUniformMatrix2fv),
10298 EXT(glUniformMatrix3fv),
10299 EXT(glUniformMatrix4fv),
10300 EXT(glGetShaderiv),
10301 EXT(glGetProgramiv),
10302 EXT(glGetShaderInfoLog),
10303 EXT(glGetProgramInfoLog),
10304 EXT(glGetAttachedShaders),
10305 EXT(glGetUniformLocation),
10306 EXT(glGetActiveUniform),
10307 EXT(glGetUniformfv),
10308 EXT(glGetUniformiv),
10309 EXT(glGetShaderSource),
10310 EXT(glVertexAttrib1s),
10311 EXT(glVertexAttrib1f),
10312 EXT(glVertexAttrib1d),
10313 EXT(glVertexAttrib2s),
10314 EXT(glVertexAttrib2f),
10315 EXT(glVertexAttrib2d),
10316 EXT(glVertexAttrib3s),
10317 EXT(glVertexAttrib3f),
10318 EXT(glVertexAttrib3d),
10319 EXT(glVertexAttrib4s),
10320 EXT(glVertexAttrib4f),
10321 EXT(glVertexAttrib4d),
10322 EXT(glVertexAttrib4Nub),
10323 EXT(glVertexAttribPointer),
10324 EXT(glEnableVertexAttribArray),
10325 EXT(glDisableVertexAttribArray),
10326 EXT(glGetVertexAttribfv),
10327 EXT(glGetVertexAttribdv),
10328 EXT(glGetVertexAttribiv),
10329 EXT(glGetVertexAttribPointerv),
10330 EXT(glBindAttribLocation),
10331 EXT(glGetActiveAttrib),
10332 EXT(glGetAttribLocation),
10333 EXT(glDrawBuffers),
10334 EXT(glStencilOpSeparate),
10335 EXT(glStencilFuncSeparate),
10336 EXT(glStencilMaskSeparate),
10337 EXT(glBlendEquationSeparate),
10338 EXT(glUniformMatrix2x3fv),
10339 EXT(glUniformMatrix3x2fv),
10340 EXT(glUniformMatrix2x4fv),
10341 EXT(glUniformMatrix4x2fv),
10342 EXT(glUniformMatrix3x4fv),
10343 EXT(glUniformMatrix4x3fv),
10344 EXT(glGenFencesNV),
10345 EXT(glDeleteFencesNV),
10346 EXT(glSetFenceNV),
10347 EXT(glTestFenceNV),
10348 EXT(glFinishFenceNV),
10349 EXT(glIsFenceNV),
10350 EXT(glGetFenceivNV),
Maxime Grégoire20942c02015-07-16 14:12:47 -040010351
Nicolas Capensa9b49372015-01-30 00:33:26 -050010352 EXT(glIsRenderbuffer),
10353 EXT(glBindRenderbuffer),
10354 EXT(glDeleteRenderbuffers),
10355 EXT(glGenRenderbuffers),
10356 EXT(glRenderbufferStorage),
10357 EXT(glGetRenderbufferParameteriv),
10358 EXT(glIsFramebuffer),
10359 EXT(glBindFramebuffer),
10360 EXT(glDeleteFramebuffers),
10361 EXT(glGenFramebuffers),
10362 EXT(glCheckFramebufferStatus),
10363 EXT(glFramebufferTexture1D),
10364 EXT(glFramebufferTexture2D),
10365 EXT(glFramebufferTexture3D),
10366 EXT(glFramebufferRenderbuffer),
10367 EXT(glGetFramebufferAttachmentParameteriv),
10368 EXT(glGenerateMipmap),
10369 EXT(glReleaseShaderCompiler),
10370 EXT(glShaderBinary),
10371 EXT(glGetShaderPrecisionFormat),
10372 EXT(glDepthRangef),
10373 EXT(glClearDepthf),
Nicolas Capens264f1522015-01-09 17:21:17 -050010374
Maxime Grégoire20942c02015-07-16 14:12:47 -040010375 // UNIMPLEMENTED
10376 EXT(glVertexAttrib1dv),
10377 EXT(glVertexAttrib1fv),
10378 EXT(glVertexAttrib1sv),
10379 EXT(glVertexAttrib2dv),
10380 EXT(glVertexAttrib2fv),
10381 EXT(glVertexAttrib2sv),
10382 EXT(glVertexAttrib3dv),
10383 EXT(glVertexAttrib3fv),
10384 EXT(glVertexAttrib3sv),
10385 EXT(glVertexAttrib4Nbv),
10386 EXT(glVertexAttrib4Niv),
10387 EXT(glVertexAttrib4Nsv),
10388 EXT(glVertexAttrib4Nubv),
10389 EXT(glVertexAttrib4Nuiv),
10390 EXT(glVertexAttrib4Nusv),
10391 EXT(glVertexAttrib4bv),
10392 EXT(glVertexAttrib4dv),
10393 EXT(glVertexAttrib4iv),
10394 EXT(glVertexAttrib4sv),
10395 EXT(glVertexAttrib4ubv),
10396 EXT(glVertexAttrib4uiv),
10397 EXT(glVertexAttrib4usv),
10398 EXT(glVertexAttrib4fv),
10399 EXT(glFogCoordfv),
10400 EXT(glFogCoorddv),
10401 EXT(glMultiDrawElements),
10402 EXT(glSecondaryColor3bv),
10403 EXT(glSecondaryColor3dv),
10404 EXT(glSecondaryColor3fv),
10405 EXT(glSecondaryColor3i),
10406 EXT(glSecondaryColor3iv),
10407 EXT(glSecondaryColor3s),
10408 EXT(glSecondaryColor3sv),
10409 EXT(glSecondaryColor3ubv),
10410 EXT(glSecondaryColor3ui),
10411 EXT(glSecondaryColor3uiv),
10412 EXT(glSecondaryColor3us),
10413 EXT(glSecondaryColor3usv),
10414 EXT(glWindowPos2s),
10415 EXT(glWindowPos2dv),
10416 EXT(glWindowPos2fv),
10417 EXT(glWindowPos2iv),
10418 EXT(glWindowPos2sv),
10419 EXT(glWindowPos3s),
10420 EXT(glWindowPos3dv),
10421 EXT(glWindowPos3fv),
10422 EXT(glWindowPos3iv),
10423 EXT(glWindowPos3sv),
10424 EXT(glMultiTexCoord1dv),
10425 EXT(glMultiTexCoord1fv),
10426 EXT(glMultiTexCoord1i),
10427 EXT(glMultiTexCoord1iv),
10428 EXT(glMultiTexCoord1s),
10429 EXT(glMultiTexCoord1sv),
10430 EXT(glMultiTexCoord2dv),
10431 EXT(glMultiTexCoord2fv),
10432 EXT(glMultiTexCoord2i),
10433 EXT(glMultiTexCoord2iv),
10434 EXT(glMultiTexCoord2s),
10435 EXT(glMultiTexCoord2sv),
10436 EXT(glMultiTexCoord3dv),
10437 EXT(glMultiTexCoord3fv),
10438 EXT(glMultiTexCoord3i),
10439 EXT(glMultiTexCoord3iv),
10440 EXT(glMultiTexCoord3s),
10441 EXT(glMultiTexCoord3sv),
10442 EXT(glMultiTexCoord4dv),
10443 EXT(glMultiTexCoord4fv),
10444 EXT(glMultiTexCoord4i),
10445 EXT(glMultiTexCoord4iv),
10446 EXT(glMultiTexCoord4s),
10447 EXT(glMultiTexCoord4sv),
10448 EXT(glBlendEquationEXT),
10449 EXT(glBlendFuncSeparateEXT),
10450 EXT(glSecondaryColor3bEXT),
10451 EXT(glSecondaryColor3bvEXT),
10452 EXT(glSecondaryColor3dEXT),
10453 EXT(glSecondaryColor3dvEXT),
10454 EXT(glSecondaryColor3fEXT),
10455 EXT(glSecondaryColor3fvEXT),
10456 EXT(glSecondaryColor3iEXT),
10457 EXT(glSecondaryColor3ivEXT),
10458 EXT(glSecondaryColor3sEXT),
10459 EXT(glSecondaryColor3svEXT),
10460 EXT(glSecondaryColor3ubEXT),
10461 EXT(glSecondaryColor3ubvEXT),
10462 EXT(glSecondaryColor3uiEXT),
10463 EXT(glSecondaryColor3uivEXT),
10464 EXT(glSecondaryColor3usEXT),
10465 EXT(glSecondaryColor3usvEXT),
10466 EXT(glSecondaryColorPointerEXT),
10467 EXT(glBlitFramebufferEXT),
10468 EXT(glRenderbufferStorageMultisampleEXT),
10469 EXT(glSecondaryColor3i),
10470 EXT(glSecondaryColor3s),
10471 EXT(glSecondaryColor3ui),
10472 EXT(glSecondaryColor3us),
10473 EXT(glSecondaryColor3bv),
10474 EXT(glSecondaryColor3fv),
10475 EXT(glSecondaryColor3dv),
10476 EXT(glSecondaryColor3ubv),
10477 EXT(glSecondaryColor3iv),
10478 EXT(glSecondaryColor3sv),
10479 EXT(glSecondaryColor3uiv),
10480 EXT(glSecondaryColor3usv),
10481 EXT(glBindAttribLocationARB),
10482 EXT(glGetActiveAttribARB),
10483 EXT(glGetAttribLocationARB),
10484 EXT(glAttachObjectARB),
10485 EXT(glCompileShaderARB),
10486 EXT(glCreateProgramObjectARB),
10487 EXT(glCreateShaderObjectARB),
10488 EXT(glDeleteObjectARB),
10489 EXT(glDetachObjectARB),
10490 EXT(glGetActiveUniformARB),
10491 EXT(glGetAttachedObjectsARB),
10492 EXT(glGetHandleARB),
10493 EXT(glGetInfoLogARB),
10494 EXT(glGetObjectParameterfvARB),
10495 EXT(glGetObjectParameterivARB),
10496 EXT(glGetShaderSourceARB),
10497 EXT(glGetUniformLocationARB),
10498 EXT(glGetUniformfvARB),
10499 EXT(glGetUniformivARB),
10500 EXT(glLinkProgramARB),
10501 EXT(glShaderSourceARB),
10502 EXT(glUniform1fARB),
10503 EXT(glUniform1fvARB),
10504 EXT(glUniform1iARB),
10505 EXT(glUniform1ivARB),
10506 EXT(glUniform2fARB),
10507 EXT(glUniform2fvARB),
10508 EXT(glUniform2iARB),
10509 EXT(glUniform2ivARB),
10510 EXT(glUniform3fARB),
10511 EXT(glUniform3fvARB),
10512 EXT(glUniform3iARB),
10513 EXT(glUniform3ivARB),
10514 EXT(glUniform4fARB),
10515 EXT(glUniform4fvARB),
10516 EXT(glUniform4iARB),
10517 EXT(glUniform4ivARB),
10518 EXT(glUniformMatrix2fvARB),
10519 EXT(glUniformMatrix3fvARB),
10520 EXT(glUniformMatrix4fvARB),
10521 EXT(glUseProgramObjectARB),
10522 EXT(glValidateProgramARB),
10523 EXT(glIsRenderbufferEXT),
10524 EXT(glBindRenderbufferEXT),
10525 EXT(glDeleteRenderbuffersEXT),
10526 EXT(glGenRenderbuffersEXT),
10527 EXT(glRenderbufferStorageEXT),
10528 EXT(glGetRenderbufferParameterivEXT),
10529 EXT(glIsFramebufferEXT),
10530 EXT(glBindFramebufferEXT),
10531 EXT(glDeleteFramebuffersEXT),
10532 EXT(glGenFramebuffersEXT),
10533 EXT(glCheckFramebufferStatusEXT),
10534 EXT(glFramebufferTexture1DEXT),
10535 EXT(glFramebufferTexture2DEXT),
10536 EXT(glFramebufferTexture3DEXT),
10537 EXT(glFramebufferRenderbufferEXT),
10538 EXT(glGetFramebufferAttachmentParameterivEXT),
10539 EXT(glGenerateMipmapEXT),
10540 EXT(glColorMaski),
10541 EXT(glGetBooleani_v),
10542 EXT(glGetIntegeri_v),
10543 EXT(glEnablei),
10544 EXT(glIsEnabledi),
10545 EXT(glDisablei),
10546 EXT(glBeginTransformFeedback),
10547 EXT(glEndTransformFeedback),
10548 EXT(glBindBufferRange),
10549 EXT(glBindBufferBase),
10550 EXT(glTransformFeedbackVaryings),
10551 EXT(glGetTransformFeedbackVarying),
10552 EXT(glClampColor),
10553 EXT(glBeginConditionalRender),
10554 EXT(glEndConditionalRender),
10555 EXT(glVertexAttribIPointer),
10556 EXT(glGetVertexAttribIiv),
10557 EXT(glGetVertexAttribIuiv),
10558 EXT(glVertexAttribI2i),
10559 EXT(glVertexAttribI1i),
10560 EXT(glVertexAttribI3i),
10561 EXT(glVertexAttribI4i),
10562 EXT(glVertexAttribI1ui),
10563 EXT(glVertexAttribI2ui),
10564 EXT(glVertexAttribI3ui),
10565 EXT(glVertexAttribI4ui),
10566 EXT(glVertexAttribI1iv),
10567 EXT(glVertexAttribI2iv),
10568 EXT(glVertexAttribI3iv),
10569 EXT(glVertexAttribI4iv),
10570 EXT(glVertexAttribI1uiv),
10571 EXT(glVertexAttribI2uiv),
10572 EXT(glVertexAttribI3uiv),
10573 EXT(glVertexAttribI4uiv),
10574 EXT(glVertexAttribI4bv),
10575 EXT(glVertexAttribI4sv),
10576 EXT(glVertexAttribI4ubv),
10577 EXT(glVertexAttribI4usv),
10578 EXT(glGetUniformuiv),
10579 EXT(glBindFragDataLocation),
10580 EXT(glGetFragDataLocation),
10581 EXT(glUniform1ui),
10582 EXT(glUniform2ui),
10583 EXT(glUniform3ui),
10584 EXT(glUniform4ui),
10585 EXT(glUniform1uiv),
10586 EXT(glUniform2uiv),
10587 EXT(glUniform3uiv),
10588 EXT(glUniform4uiv),
10589 EXT(glTexParameterIiv),
10590 EXT(glTexParameterIuiv),
10591 EXT(glGetTexParameterIiv),
10592 EXT(glGetTexParameterIuiv),
10593 EXT(glClearBufferiv),
10594 EXT(glClearBufferuiv),
10595 EXT(glClearBufferfv),
10596 EXT(glClearBufferfi),
10597 EXT(glGetStringi),
10598 //EXT(wglCreateContextAttribsARB),
10599 EXT(glMapNamedBufferEXT),
10600 EXT(glUnmapNamedBufferEXT),
10601 EXT(glGetNamedBufferParameterivEXT),
10602 EXT(glGetTextureImageEXT),
10603 EXT(glTextureSubImage2DEXT),
10604 EXT(glTextureSubImage3DEXT),
10605
10606
10607 EXT(glcuR0d4nX),
10608 EXT(wgl1fx34c0da),
10609
10610
10611 //MORE unimplemented()
10612 EXT(glCopyTexImage1DEXT),
10613 EXT(glCopyTexImage2DEXT),
10614 EXT(glCopyTexSubImage1DEXT),
10615 EXT(glCopyTexSubImage2DEXT),
10616 EXT(glCopyTexSubImage3DEXT),
10617 EXT(glPolygonOffsetEXT),
10618 EXT(glTexSubImage1DEXT),
10619 EXT(glTexSubImage2DEXT),
10620 EXT(glTexImage3DEXT),
10621 EXT(glTexSubImage3DEXT),
10622 EXT(glAreTexturesResidentEXT),
10623 EXT(glBindTextureEXT),
10624 EXT(glDeleteTexturesEXT),
10625 EXT(glGenTexturesEXT),
10626 EXT(glIsTextureEXT),
10627 EXT(glPrioritizeTexturesEXT),
10628 EXT(glDrawRangeElementsEXT),
10629 EXT(glSampleCoverageARB),
10630 EXT(glActiveTextureARB),
10631 EXT(glClientActiveTextureARB),
10632 EXT(glMultiTexCoord1dARB),
10633 EXT(glMultiTexCoord1dvARB),
10634 EXT(glMultiTexCoord1fARB),
10635 EXT(glMultiTexCoord1fvARB),
10636 EXT(glMultiTexCoord1iARB),
10637 EXT(glMultiTexCoord1ivARB),
10638 EXT(glMultiTexCoord1sARB),
10639 EXT(glMultiTexCoord1svARB),
10640 EXT(glMultiTexCoord2dARB),
10641 EXT(glMultiTexCoord2dvARB),
10642 EXT(glMultiTexCoord2fARB),
10643 EXT(glMultiTexCoord2fvARB),
10644 EXT(glMultiTexCoord2iARB),
10645 EXT(glMultiTexCoord2ivARB),
10646 EXT(glMultiTexCoord2sARB),
10647 EXT(glMultiTexCoord2svARB),
10648 EXT(glMultiTexCoord3dARB),
10649 EXT(glMultiTexCoord3dvARB),
10650 EXT(glMultiTexCoord3fARB),
10651 EXT(glMultiTexCoord3fvARB),
10652 EXT(glMultiTexCoord3iARB),
10653 EXT(glMultiTexCoord3ivARB),
10654 EXT(glMultiTexCoord3sARB),
10655 EXT(glMultiTexCoord3svARB),
10656 EXT(glMultiTexCoord4dARB),
10657 EXT(glMultiTexCoord4dvARB),
10658 EXT(glMultiTexCoord4fARB),
10659 EXT(glMultiTexCoord4fvARB),
10660 EXT(glMultiTexCoord4iARB),
10661 EXT(glMultiTexCoord4ivARB),
10662 EXT(glMultiTexCoord4sARB),
10663 EXT(glMultiTexCoord4svARB),
10664 EXT(glCompressedTexImage3DARB),
10665 EXT(glCompressedTexImage2DARB),
10666 EXT(glCompressedTexImage1DARB),
10667 EXT(glCompressedTexSubImage3DARB),
10668 EXT(glCompressedTexSubImage2DARB),
10669 EXT(glCompressedTexSubImage1DARB),
10670 EXT(glGetCompressedTexImageARB),
10671 EXT(glPointParameterfARB),
10672 EXT(glPointParameterfvARB),
10673 EXT(glBlendColorEXT),
10674 EXT(glFogCoordfEXT),
10675 EXT(glFogCoordfvEXT),
10676 EXT(glFogCoorddEXT),
10677 EXT(glFogCoorddvEXT),
10678 EXT(glFogCoordPointerEXT),
10679 EXT(glMultiDrawArraysEXT),
10680 EXT(glMultiDrawElementsEXT),
10681 EXT(glGenQueriesARB),
10682 EXT(glDeleteQueriesARB),
10683 EXT(glIsQueryARB),
10684 EXT(glBeginQueryARB),
10685 EXT(glEndQueryARB),
10686 EXT(glGetQueryivARB),
10687 EXT(glGetQueryObjectivARB),
10688 EXT(glGetQueryObjectuivARB),
10689 EXT(glBindBufferARB),
10690 EXT(glDeleteBuffersARB),
10691 EXT(glGenBuffersARB),
10692 EXT(glIsBufferARB),
10693 EXT(glBufferDataARB),
10694 EXT(glBufferSubDataARB),
10695 EXT(glGetBufferSubDataARB),
10696 EXT(glMapBufferARB),
10697 EXT(glUnmapBufferARB),
10698 EXT(glGetBufferParameterivARB),
10699 EXT(glGetBufferPointervARB),
10700 EXT(glDrawBuffersARB),
10701 EXT(glBlendEquationSeparateEXT),
10702 EXT(glActiveStencilFaceEXT),
10703 EXT(glClampColorARB),
10704 EXT(glDrawArraysInstancedARB),
10705 EXT(glDrawElementsInstancedARB),
10706 EXT(glProgramParameteriARB),
10707 EXT(glFramebufferTextureARB),
10708 EXT(glFramebufferTextureLayerARB),
10709 EXT(glFramebufferTextureFaceARB),
10710 EXT(glColorTable),
10711 EXT(glColorTableParameterfv),
10712 EXT(glColorTableParameteriv),
10713 EXT(glCopyColorTable),
10714 EXT(glGetColorTable),
10715 EXT(glGetColorTableParameterfv),
10716 EXT(glGetColorTableParameteriv),
10717 EXT(glColorSubTable),
10718 EXT(glCopyColorSubTable),
10719 EXT(glConvolutionFilter1D),
10720 EXT(glConvolutionFilter2D),
10721 EXT(glConvolutionParameterf),
10722 EXT(glConvolutionParameterfv),
10723 EXT(glConvolutionParameteri),
10724 EXT(glConvolutionParameteriv),
10725 EXT(glCopyConvolutionFilter1D),
10726 EXT(glCopyConvolutionFilter2D),
10727 EXT(glGetConvolutionFilter),
10728 EXT(glGetConvolutionParameterfv),
10729 EXT(glGetConvolutionParameteriv),
10730 EXT(glGetSeparableFilter),
10731 EXT(glSeparableFilter2D),
10732 EXT(glGetHistogram),
10733 EXT(glGetHistogramParameterfv),
10734 EXT(glGetHistogramParameteriv),
10735 EXT(glGetMinmax),
10736 EXT(glGetMinmaxParameterfv),
10737 EXT(glGetMinmaxParameteriv),
10738 EXT(glHistogram),
10739 EXT(glMinmax),
10740 EXT(glResetHistogram),
10741 EXT(glResetMinmax),
10742 EXT(glVertexAttribDivisorARB),
10743 EXT(glMapBufferRange),
10744 EXT(glFlushMappedBufferRange),
10745 EXT(glTexBufferARB),
10746 EXT(glBindVertexArray),
10747 EXT(glDeleteVertexArrays),
10748 EXT(glGenVertexArrays),
10749 EXT(glIsVertexArray),
10750 EXT(glProgramStringARB),
10751 EXT(glBindProgramARB),
10752 EXT(glDeleteProgramsARB),
10753 EXT(glGenProgramsARB),
10754 EXT(glProgramEnvParameter4dARB),
10755 EXT(glProgramEnvParameter4dvARB),
10756 EXT(glProgramEnvParameter4fARB),
10757 EXT(glProgramEnvParameter4fvARB),
10758 EXT(glProgramLocalParameter4dARB),
10759 EXT(glProgramLocalParameter4dvARB),
10760 EXT(glProgramLocalParameter4fARB),
10761 EXT(glProgramLocalParameter4fvARB),
10762 EXT(glGetProgramEnvParameterdvARB),
10763 EXT(glGetProgramEnvParameterfvARB),
10764 EXT(glGetProgramLocalParameterdvARB),
10765 EXT(glGetProgramLocalParameterfvARB),
10766 EXT(glGetProgramivARB),
10767 EXT(glGetProgramStringARB),
10768 EXT(glIsProgramARB),
10769 EXT(glEnableVertexAttribArrayARB),
10770 EXT(glDisableVertexAttribArrayARB),
10771 EXT(glGetVertexAttribdvARB),
10772 EXT(glGetVertexAttribfvARB),
10773 EXT(glGetVertexAttribivARB),
10774 EXT(glGetVertexAttribPointervARB),
10775 EXT(glVertexAttrib1dARB),
10776 EXT(glVertexAttrib1dvARB),
10777 EXT(glVertexAttrib1fARB),
10778 EXT(glVertexAttrib1fvARB),
10779 EXT(glVertexAttrib1sARB),
10780 EXT(glVertexAttrib1svARB),
10781 EXT(glVertexAttrib2dARB),
10782 EXT(glVertexAttrib2dvARB),
10783 EXT(glVertexAttrib2fARB),
10784 EXT(glVertexAttrib2fvARB),
10785 EXT(glVertexAttrib2sARB),
10786 EXT(glVertexAttrib2svARB),
10787 EXT(glVertexAttrib3dARB),
10788 EXT(glVertexAttrib3dvARB),
10789 EXT(glVertexAttrib3fARB),
10790 EXT(glVertexAttrib3fvARB),
10791 EXT(glVertexAttrib3sARB),
10792 EXT(glVertexAttrib3svARB),
10793 EXT(glVertexAttrib4NbvARB),
10794 EXT(glVertexAttrib4NivARB),
10795 EXT(glVertexAttrib4NsvARB),
10796 EXT(glVertexAttrib4NubARB),
10797 EXT(glVertexAttrib4NubvARB),
10798 EXT(glVertexAttrib4NuivARB),
10799 EXT(glVertexAttrib4NusvARB),
10800 EXT(glVertexAttrib4bvARB),
10801 EXT(glVertexAttrib4dARB),
10802 EXT(glVertexAttrib4dvARB),
10803 EXT(glVertexAttrib4fARB),
10804 EXT(glVertexAttrib4fvARB),
10805 EXT(glVertexAttrib4ivARB),
10806 EXT(glVertexAttrib4sARB),
10807 EXT(glVertexAttrib4svARB),
10808 EXT(glVertexAttrib4ubvARB),
10809 EXT(glVertexAttrib4uivARB),
10810 EXT(glVertexAttrib4usvARB),
10811 EXT(glVertexAttribPointerARB),
10812 EXT(glEnableVertexAttribArrayARB),
10813 EXT(glDisableVertexAttribArrayARB),
10814 EXT(glWindowPos2dARB),
10815 EXT(glWindowPos2dvARB),
10816 EXT(glWindowPos2fARB),
10817 EXT(glWindowPos2fvARB),
10818 EXT(glWindowPos2iARB),
10819 EXT(glWindowPos2ivARB),
10820 EXT(glWindowPos2sARB),
10821 EXT(glWindowPos2svARB),
10822 EXT(glWindowPos3dARB),
10823 EXT(glWindowPos3dvARB),
10824 EXT(glWindowPos3fARB),
10825 EXT(glWindowPos3fvARB),
10826 EXT(glWindowPos3iARB),
10827 EXT(glWindowPos3ivARB),
10828 EXT(glWindowPos3sARB),
10829 EXT(glWindowPos3svARB),
10830 EXT(glDrawBuffersATI),
10831 EXT(glUniformBufferEXT),
10832 EXT(glGetUniformBufferSizeEXT),
10833 EXT(glGetUniformOffsetEXT),
10834 EXT(glLockArraysEXT),
10835 EXT(glUnlockArraysEXT),
10836 EXT(glDepthBoundsEXT),
10837 EXT(glMatrixLoadfEXT),
10838 EXT(glMatrixLoaddEXT),
10839 EXT(glMatrixMultfEXT),
10840 EXT(glMatrixMultdEXT),
10841 EXT(glMatrixLoadIdentityEXT),
10842 EXT(glMatrixRotatefEXT),
10843 EXT(glMatrixRotatedEXT),
10844 EXT(glMatrixScalefEXT),
10845 EXT(glMatrixScaledEXT),
10846 EXT(glMatrixTranslatefEXT),
10847 EXT(glMatrixTranslatedEXT),
10848 EXT(glMatrixFrustumEXT),
10849 EXT(glMatrixOrthoEXT),
10850 EXT(glMatrixPopEXT),
10851 EXT(glMatrixPushEXT),
10852 EXT(glClientAttribDefaultEXT),
10853 EXT(glPushClientAttribDefaultEXT),
10854 EXT(glTextureParameterfEXT),
10855 EXT(glTextureParameterfvEXT),
10856 EXT(glTextureParameteriEXT),
10857 EXT(glTextureParameterivEXT),
10858 EXT(glTextureImage1DEXT),
10859 EXT(glTextureImage2DEXT),
10860 EXT(glTextureSubImage1DEXT),
10861 EXT(glTextureSubImage2DEXT),
10862 EXT(glCopyTextureImage1DEXT),
10863 EXT(glCopyTextureImage2DEXT),
10864 EXT(glCopyTextureSubImage1DEXT),
10865 EXT(glCopyTextureSubImage2DEXT),
10866 EXT(glGetTextureImageEXT),
10867 EXT(glGetTextureParameterfvEXT),
10868 EXT(glGetTextureParameterivEXT),
10869 EXT(glGetTextureLevelParameterfvEXT),
10870 EXT(glGetTextureLevelParameterivEXT),
10871 EXT(glTextureImage3DEXT),
10872 EXT(glTextureSubImage3DEXT),
10873 EXT(glCopyTextureSubImage3DEXT),
10874 EXT(glBindMultiTextureEXT),
10875 EXT(glMultiTexCoordPointerEXT),
10876 EXT(glMultiTexEnvfEXT),
10877 EXT(glMultiTexEnvfvEXT),
10878 EXT(glMultiTexEnviEXT),
10879 EXT(glMultiTexEnvivEXT),
10880 EXT(glMultiTexGendEXT),
10881 EXT(glMultiTexGendvEXT),
10882 EXT(glMultiTexGenfEXT),
10883 EXT(glMultiTexGenfvEXT),
10884 EXT(glMultiTexGeniEXT),
10885 EXT(glMultiTexGenivEXT),
10886 EXT(glGetMultiTexEnvfvEXT),
10887 EXT(glGetMultiTexEnvivEXT),
10888 EXT(glGetMultiTexGendvEXT),
10889 EXT(glGetMultiTexGenfvEXT),
10890 EXT(glGetMultiTexGenivEXT),
10891 EXT(glMultiTexParameteriEXT),
10892 EXT(glMultiTexParameterivEXT),
10893 EXT(glMultiTexParameterfEXT),
10894 EXT(glMultiTexParameterfvEXT),
10895 EXT(glMultiTexImage1DEXT),
10896 EXT(glMultiTexImage2DEXT),
10897 EXT(glMultiTexSubImage1DEXT),
10898 EXT(glMultiTexSubImage2DEXT),
10899 EXT(glCopyMultiTexImage1DEXT),
10900 EXT(glCopyMultiTexImage2DEXT),
10901 EXT(glCopyMultiTexSubImage1DEXT),
10902 EXT(glCopyMultiTexSubImage2DEXT),
10903 EXT(glGetMultiTexImageEXT),
10904 EXT(glGetMultiTexParameterfvEXT),
10905 EXT(glGetMultiTexParameterivEXT),
10906 EXT(glGetMultiTexLevelParameterfvEXT),
10907 EXT(glGetMultiTexLevelParameterivEXT),
10908 EXT(glMultiTexImage3DEXT),
10909 EXT(glMultiTexSubImage3DEXT),
10910 EXT(glCopyMultiTexSubImage3DEXT),
10911 EXT(glEnableClientStateIndexedEXT),
10912 EXT(glDisableClientStateIndexedEXT),
10913 EXT(glGetFloatIndexedvEXT),
10914 EXT(glGetDoubleIndexedvEXT),
10915 EXT(glGetPointerIndexedvEXT),
10916 EXT(glEnableIndexedEXT),
10917 EXT(glDisableIndexedEXT),
10918 EXT(glIsEnabledIndexedEXT),
10919 EXT(glGetIntegerIndexedvEXT),
10920 EXT(glGetBooleanIndexedvEXT),
10921 EXT(glCompressedTextureImage3DEXT),
10922 EXT(glCompressedTextureImage2DEXT),
10923 EXT(glCompressedTextureImage1DEXT),
10924 EXT(glCompressedTextureSubImage3DEXT),
10925 EXT(glCompressedTextureSubImage2DEXT),
10926 EXT(glCompressedTextureSubImage1DEXT),
10927 EXT(glGetCompressedTextureImageEXT),
10928 EXT(glCompressedMultiTexImage3DEXT),
10929 EXT(glCompressedMultiTexImage2DEXT),
10930 EXT(glCompressedMultiTexImage1DEXT),
10931 EXT(glCompressedMultiTexSubImage3DEXT),
10932 EXT(glCompressedMultiTexSubImage2DEXT),
10933 EXT(glCompressedMultiTexSubImage1DEXT),
10934 EXT(glGetCompressedMultiTexImageEXT),
10935 EXT(glMatrixLoadTransposefEXT),
10936 EXT(glMatrixLoadTransposedEXT),
10937 EXT(glMatrixMultTransposefEXT),
10938 EXT(glMatrixMultTransposedEXT),
10939 EXT(glNamedBufferDataEXT),
10940 EXT(glNamedBufferSubDataEXT),
10941 EXT(glMapNamedBufferEXT),
10942 EXT(glUnmapNamedBufferEXT),
10943 EXT(glGetNamedBufferParameterivEXT),
10944 EXT(glGetNamedBufferPointervEXT),
10945 EXT(glGetNamedBufferSubDataEXT),
10946 EXT(glProgramUniform1fEXT),
10947 EXT(glProgramUniform2fEXT),
10948 EXT(glProgramUniform3fEXT),
10949 EXT(glProgramUniform4fEXT),
10950 EXT(glProgramUniform1iEXT),
10951 EXT(glProgramUniform2iEXT),
10952 EXT(glProgramUniform3iEXT),
10953 EXT(glProgramUniform4iEXT),
10954 EXT(glProgramUniform1fvEXT),
10955 EXT(glProgramUniform2fvEXT),
10956 EXT(glProgramUniform3fvEXT),
10957 EXT(glProgramUniform4fvEXT),
10958 EXT(glProgramUniform1ivEXT),
10959 EXT(glProgramUniform2ivEXT),
10960 EXT(glProgramUniform3ivEXT),
10961 EXT(glProgramUniform4ivEXT),
10962 EXT(glProgramUniformMatrix2fvEXT),
10963 EXT(glProgramUniformMatrix3fvEXT),
10964 EXT(glProgramUniformMatrix4fvEXT),
10965 EXT(glProgramUniformMatrix2x3fvEXT),
10966 EXT(glProgramUniformMatrix3x2fvEXT),
10967 EXT(glProgramUniformMatrix2x4fvEXT),
10968 EXT(glProgramUniformMatrix4x2fvEXT),
10969 EXT(glProgramUniformMatrix3x4fvEXT),
10970 EXT(glProgramUniformMatrix4x3fvEXT),
10971 EXT(glTextureBufferEXT),
10972 EXT(glMultiTexBufferEXT),
10973 EXT(glTextureParameterIivEXT),
10974 EXT(glTextureParameterIuivEXT),
10975 EXT(glGetTextureParameterIivEXT),
10976 EXT(glGetTextureParameterIuivEXT),
10977 EXT(glMultiTexParameterIivEXT),
10978 EXT(glMultiTexParameterIuivEXT),
10979 EXT(glGetMultiTexParameterIivEXT),
10980 EXT(glGetMultiTexParameterIuivEXT),
10981 EXT(glProgramUniform1uiEXT),
10982 EXT(glProgramUniform2uiEXT),
10983 EXT(glProgramUniform3uiEXT),
10984 EXT(glProgramUniform4uiEXT),
10985 EXT(glProgramUniform1uivEXT),
10986 EXT(glProgramUniform2uivEXT),
10987 EXT(glProgramUniform3uivEXT),
10988 EXT(glProgramUniform4uivEXT),
10989 EXT(glNamedProgramLocalParameters4fvEXT),
10990 EXT(glNamedProgramLocalParameterI4iEXT),
10991 EXT(glNamedProgramLocalParameterI4ivEXT),
10992 EXT(glNamedProgramLocalParametersI4ivEXT),
10993 EXT(glNamedProgramLocalParameterI4uiEXT),
10994 EXT(glNamedProgramLocalParameterI4uivEXT),
10995 EXT(glNamedProgramLocalParametersI4uivEXT),
10996 EXT(glGetNamedProgramLocalParameterIivEXT),
10997 EXT(glGetNamedProgramLocalParameterIuivEXT),
10998 EXT(glEnableClientStateiEXT),
10999 EXT(glDisableClientStateiEXT),
11000 EXT(glGetFloati_vEXT),
11001 EXT(glGetDoublei_vEXT),
11002 EXT(glGetPointeri_vEXT),
11003 EXT(glNamedProgramStringEXT),
11004 EXT(glNamedProgramLocalParameter4dEXT),
11005 EXT(glNamedProgramLocalParameter4dvEXT),
11006 EXT(glNamedProgramLocalParameter4fEXT),
11007 EXT(glNamedProgramLocalParameter4fvEXT),
11008 EXT(glGetNamedProgramLocalParameterdvEXT),
11009 EXT(glGetNamedProgramLocalParameterfvEXT),
11010 EXT(glGetNamedProgramivEXT),
11011 EXT(glGetNamedProgramStringEXT),
11012 EXT(glNamedRenderbufferStorageEXT),
11013 EXT(glGetNamedRenderbufferParameterivEXT),
11014 EXT(glNamedRenderbufferStorageMultisampleEXT),
11015 EXT(glNamedRenderbufferStorageMultisampleCoverageEXT),
11016 EXT(glCheckNamedFramebufferStatusEXT),
11017 EXT(glNamedFramebufferTexture1DEXT),
11018 EXT(glNamedFramebufferTexture2DEXT),
11019 EXT(glNamedFramebufferTexture3DEXT),
11020 EXT(glNamedFramebufferRenderbufferEXT),
11021 EXT(glGetNamedFramebufferAttachmentParameterivEXT),
11022 EXT(glGenerateTextureMipmapEXT),
11023 EXT(glGenerateMultiTexMipmapEXT),
11024 EXT(glFramebufferDrawBufferEXT),
11025 EXT(glFramebufferDrawBuffersEXT),
11026 EXT(glFramebufferReadBufferEXT),
11027 EXT(glGetFramebufferParameterivEXT),
11028 EXT(glNamedCopyBufferSubDataEXT),
11029 EXT(glNamedFramebufferTextureEXT),
11030 EXT(glNamedFramebufferTextureLayerEXT),
11031 EXT(glNamedFramebufferTextureFaceEXT),
11032 EXT(glTextureRenderbufferEXT),
11033 EXT(glMultiTexRenderbufferEXT),
11034 EXT(glVertexArrayVertexOffsetEXT),
11035 EXT(glVertexArrayColorOffsetEXT),
11036 EXT(glVertexArrayEdgeFlagOffsetEXT),
11037 EXT(glVertexArrayIndexOffsetEXT),
11038 EXT(glVertexArrayNormalOffsetEXT),
11039 EXT(glVertexArrayTexCoordOffsetEXT),
11040 EXT(glVertexArrayMultiTexCoordOffsetEXT),
11041 EXT(glVertexArrayFogCoordOffsetEXT),
11042 EXT(glVertexArraySecondaryColorOffsetEXT),
11043 EXT(glVertexArrayVertexAttribOffsetEXT),
11044 EXT(glVertexArrayVertexAttribIOffsetEXT),
11045 EXT(glEnableVertexArrayEXT),
11046 EXT(glDisableVertexArrayEXT),
11047 EXT(glEnableVertexArrayAttribEXT),
11048 EXT(glDisableVertexArrayAttribEXT),
11049 EXT(glGetVertexArrayIntegervEXT),
11050 EXT(glGetVertexArrayPointervEXT),
11051 EXT(glGetVertexArrayIntegeri_vEXT),
11052 EXT(glGetVertexArrayPointeri_vEXT),
11053 EXT(glMapNamedBufferRangeEXT),
11054 EXT(glFlushMappedNamedBufferRangeEXT),
11055 EXT(glNamedBufferStorageEXT),
11056 EXT(glClearNamedBufferDataEXT),
11057 EXT(glClearNamedBufferSubDataEXT),
11058 EXT(glNamedFramebufferParameteriEXT),
11059 EXT(glGetNamedFramebufferParameterivEXT),
11060 EXT(glProgramUniform1dEXT),
11061 EXT(glProgramUniform2dEXT),
11062 EXT(glProgramUniform3dEXT),
11063 EXT(glProgramUniform4dEXT),
11064 EXT(glProgramUniform1dvEXT),
11065 EXT(glProgramUniform2dvEXT),
11066 EXT(glProgramUniform3dvEXT),
11067 EXT(glProgramUniform4dvEXT),
11068 EXT(glProgramUniformMatrix2dvEXT),
11069 EXT(glProgramUniformMatrix3dvEXT),
11070 EXT(glProgramUniformMatrix4dvEXT),
11071 EXT(glProgramUniformMatrix2x3dvEXT),
11072 EXT(glProgramUniformMatrix2x4dvEXT),
11073 EXT(glProgramUniformMatrix3x2dvEXT),
11074 EXT(glProgramUniformMatrix3x4dvEXT),
11075 EXT(glProgramUniformMatrix4x2dvEXT),
11076 EXT(glProgramUniformMatrix4x3dvEXT),
11077 EXT(glTextureBufferRangeEXT),
11078 EXT(glTextureStorage1DEXT),
11079 EXT(glTextureStorage2DEXT),
11080 EXT(glTextureStorage3DEXT),
11081 EXT(glTextureStorage2DMultisampleEXT),
11082 EXT(glTextureStorage3DMultisampleEXT),
11083 EXT(glVertexArrayBindVertexBufferEXT),
11084 EXT(glVertexArrayVertexAttribFormatEXT),
11085 EXT(glVertexArrayVertexAttribIFormatEXT),
11086 EXT(glVertexArrayVertexAttribLFormatEXT),
11087 EXT(glVertexArrayVertexAttribBindingEXT),
11088 EXT(glVertexArrayVertexBindingDivisorEXT),
11089 EXT(glVertexArrayVertexAttribLOffsetEXT),
11090 EXT(glTexturePageCommitmentEXT),
11091 EXT(glVertexArrayVertexAttribDivisorEXT),
11092 EXT(glColorMaskIndexedEXT),
11093 EXT(glDrawArraysInstancedEXT),
11094 EXT(glDrawElementsInstancedEXT),
11095 EXT(glProgramParameteriEXT),
11096 EXT(glFramebufferTextureEXT),
11097 EXT(glFramebufferTextureLayerEXT),
11098 EXT(glFramebufferTextureFaceEXT),
11099 EXT(glProgramEnvParameters4fvEXT),
11100 EXT(glProgramLocalParameters4fvEXT),
11101 EXT(glGetUniformuivEXT),
11102 EXT(glBindFragDataLocationEXT),
11103 EXT(glGetFragDataLocationEXT),
11104 EXT(glUniform1uiEXT),
11105 EXT(glUniform2uiEXT),
11106 EXT(glUniform3uiEXT),
11107 EXT(glUniform4uiEXT),
11108 EXT(glUniform1uivEXT),
11109 EXT(glUniform2uivEXT),
11110 EXT(glUniform3uivEXT),
11111 EXT(glUniform4uivEXT),
11112 EXT(glVertexAttribI1iEXT),
11113 EXT(glVertexAttribI2iEXT),
11114 EXT(glVertexAttribI3iEXT),
11115 EXT(glVertexAttribI4iEXT),
11116 EXT(glVertexAttribI1uiEXT),
11117 EXT(glVertexAttribI2uiEXT),
11118 EXT(glVertexAttribI3uiEXT),
11119 EXT(glVertexAttribI4uiEXT),
11120 EXT(glVertexAttribI1ivEXT),
11121 EXT(glVertexAttribI2ivEXT),
11122 EXT(glVertexAttribI3ivEXT),
11123 EXT(glVertexAttribI4ivEXT),
11124 EXT(glVertexAttribI1uivEXT),
11125 EXT(glVertexAttribI2uivEXT),
11126 EXT(glVertexAttribI3uivEXT),
11127 EXT(glVertexAttribI4uivEXT),
11128 EXT(glVertexAttribI4bvEXT),
11129 EXT(glVertexAttribI4svEXT),
11130 EXT(glVertexAttribI4ubvEXT),
11131 EXT(glVertexAttribI4usvEXT),
11132 EXT(glVertexAttribIPointerEXT),
11133 EXT(glGetVertexAttribIivEXT),
11134 EXT(glGetVertexAttribIuivEXT),
11135 EXT(glPointParameterfEXT),
11136 EXT(glPointParameterfvEXT),
11137 EXT(glTexBufferEXT),
11138 EXT(glTexParameterIivEXT),
11139 EXT(glTexParameterIuivEXT),
11140 EXT(glGetTexParameterIivEXT),
11141 EXT(glGetTexParameterIuivEXT),
11142 EXT(glClearColorIiEXT),
11143 EXT(glClearColorIuiEXT),
11144 EXT(glGetQueryObjecti64vEXT),
11145 EXT(glGetQueryObjectui64vEXT),
11146 EXT(glArrayElementEXT),
11147 EXT(glColorPointerEXT),
11148 EXT(glDrawArraysEXT),
11149 EXT(glEdgeFlagPointerEXT),
11150 EXT(glGetPointervEXT),
11151 EXT(glIndexPointerEXT),
11152 EXT(glNormalPointerEXT),
11153 EXT(glTexCoordPointerEXT),
11154 EXT(glVertexPointerEXT),
11155 EXT(glBeginConditionalRenderNV),
11156 EXT(glEndConditionalRenderNV),
11157 EXT(glDepthRangedNV),
11158 EXT(glClearDepthdNV),
11159 EXT(glDepthBoundsdNV),
11160 EXT(glGetMultisamplefvNV),
11161 EXT(glSampleMaskIndexedNV),
11162 EXT(glTexRenderbufferNV),
11163 EXT(glProgramNamedParameter4fNV),
11164 EXT(glProgramNamedParameter4fvNV),
11165 EXT(glProgramNamedParameter4dNV),
11166 EXT(glProgramNamedParameter4dvNV),
11167 EXT(glGetProgramNamedParameterfvNV),
11168 EXT(glGetProgramNamedParameterdvNV),
11169 EXT(glRenderbufferStorageMultisampleCoverageNV),
11170 EXT(glProgramLocalParameterI4iNV),
11171 EXT(glProgramLocalParameterI4ivNV),
11172 EXT(glProgramLocalParametersI4ivNV),
11173 EXT(glProgramLocalParameterI4uiNV),
11174 EXT(glProgramLocalParameterI4uivNV),
11175 EXT(glProgramLocalParametersI4uivNV),
11176 EXT(glProgramEnvParameterI4iNV),
11177 EXT(glProgramEnvParameterI4ivNV),
11178 EXT(glProgramEnvParametersI4ivNV),
11179 EXT(glProgramEnvParameterI4uiNV),
11180 EXT(glProgramEnvParameterI4uivNV),
11181 EXT(glProgramEnvParametersI4uivNV),
11182 EXT(glGetProgramLocalParameterIivNV),
11183 EXT(glGetProgramLocalParameterIuivNV),
11184 EXT(glGetProgramEnvParameterIivNV),
11185 EXT(glGetProgramEnvParameterIuivNV),
11186 EXT(glVertex2hNV),
11187 EXT(glVertex2hvNV),
11188 EXT(glVertex3hNV),
11189 EXT(glVertex3hvNV),
11190 EXT(glVertex4hNV),
11191 EXT(glVertex4hvNV),
11192 EXT(glNormal3hNV),
11193 EXT(glNormal3hvNV),
11194 EXT(glColor3hNV),
11195 EXT(glColor3hvNV),
11196 EXT(glColor4hNV),
11197 EXT(glColor4hvNV),
11198 EXT(glTexCoord1hNV),
11199 EXT(glTexCoord1hvNV),
11200 EXT(glTexCoord2hNV),
11201 EXT(glTexCoord2hvNV),
11202 EXT(glTexCoord3hNV),
11203 EXT(glTexCoord3hvNV),
11204 EXT(glTexCoord4hNV),
11205 EXT(glTexCoord4hvNV),
11206 EXT(glMultiTexCoord1hNV),
11207 EXT(glMultiTexCoord1hvNV),
11208 EXT(glMultiTexCoord2hNV),
11209 EXT(glMultiTexCoord2hvNV),
11210 EXT(glMultiTexCoord3hNV),
11211 EXT(glMultiTexCoord3hvNV),
11212 EXT(glMultiTexCoord4hNV),
11213 EXT(glMultiTexCoord4hvNV),
11214 EXT(glFogCoordhNV),
11215 EXT(glFogCoordhvNV),
11216 EXT(glSecondaryColor3hNV),
11217 EXT(glSecondaryColor3hvNV),
11218 EXT(glVertexWeighthNV),
11219 EXT(glVertexWeighthvNV),
11220 EXT(glVertexAttrib1hNV),
11221 EXT(glVertexAttrib1hvNV),
11222 EXT(glVertexAttrib2hNV),
11223 EXT(glVertexAttrib2hvNV),
11224 EXT(glVertexAttrib3hNV),
11225 EXT(glVertexAttrib3hvNV),
11226 EXT(glVertexAttrib4hNV),
11227 EXT(glVertexAttrib4hvNV),
11228 EXT(glVertexAttribs1hvNV),
11229 EXT(glVertexAttribs2hvNV),
11230 EXT(glVertexAttribs3hvNV),
11231 EXT(glVertexAttribs4hvNV),
11232 EXT(glBeginOcclusionQueryNV),
11233 EXT(glEndOcclusionQueryNV),
11234 EXT(glGetOcclusionQueryivNV),
11235 EXT(glGetOcclusionQueryuivNV),
11236 EXT(glGenOcclusionQueriesNV),
11237 EXT(glDeleteOcclusionQueriesNV),
11238 EXT(glIsOcclusionQueryNV),
11239 EXT(glProgramBufferParametersfvNV),
11240 EXT(glProgramBufferParametersIivNV),
11241 EXT(glProgramBufferParametersIuivNV),
11242 EXT(glPixelDataRangeNV),
11243 EXT(glFlushPixelDataRangeNV),
11244 EXT(glPointParameteriNV),
11245 EXT(glPointParameterivNV),
11246 EXT(glPrimitiveRestartNV),
11247 EXT(glPrimitiveRestartIndexNV),
11248 EXT(glCombinerParameterfvNV),
11249 EXT(glCombinerParameterfNV),
11250 EXT(glCombinerParameterivNV),
11251 EXT(glCombinerParameteriNV),
11252 EXT(glCombinerInputNV),
11253 EXT(glCombinerOutputNV),
11254 EXT(glFinalCombinerInputNV),
11255 EXT(glGetCombinerInputParameterfvNV),
11256 EXT(glGetCombinerInputParameterivNV),
11257 EXT(glGetCombinerOutputParameterfvNV),
11258 EXT(glGetCombinerOutputParameterivNV),
11259 EXT(glGetFinalCombinerInputParameterfvNV),
11260 EXT(glGetFinalCombinerInputParameterivNV),
11261 EXT(glCombinerStageParameterfvNV),
11262 EXT(glGetCombinerStageParameterfvNV),
11263 EXT(glMakeBufferResidentNV),
11264 EXT(glMakeBufferNonResidentNV),
11265 EXT(glIsBufferResidentNV),
11266 EXT(glMakeNamedBufferResidentNV),
11267 EXT(glMakeNamedBufferNonResidentNV),
11268 EXT(glIsNamedBufferResidentNV),
11269 EXT(glGetBufferParameterui64vNV),
11270 EXT(glGetNamedBufferParameterui64vNV),
11271 EXT(glGetIntegerui64vNV),
11272 EXT(glUniformui64NV),
11273 EXT(glUniformui64vNV),
11274 EXT(glGetUniformui64vNV),
11275 EXT(glProgramUniformui64NV),
11276 EXT(glProgramUniformui64vNV),
11277 EXT(glBeginTransformFeedbackNV),
11278 EXT(glEndTransformFeedbackNV),
11279 EXT(glTransformFeedbackAttribsNV),
11280 EXT(glBindBufferRangeNV),
11281 EXT(glBindBufferOffsetNV),
11282 EXT(glBindBufferBaseNV),
11283 EXT(glTransformFeedbackVaryingsNV),
11284 EXT(glActiveVaryingNV),
11285 EXT(glGetVaryingLocationNV),
11286 EXT(glGetActiveVaryingNV),
11287 EXT(glGetTransformFeedbackVaryingNV),
11288 EXT(glTransformFeedbackStreamAttribsNV),
11289 EXT(glFlushVertexArrayRangeNV),
11290 EXT(glVertexArrayRangeNV),
11291 EXT(glBufferAddressRangeNV),
11292 EXT(glVertexFormatNV),
11293 EXT(glNormalFormatNV),
11294 EXT(glColorFormatNV),
11295 EXT(glIndexFormatNV),
11296 EXT(glTexCoordFormatNV),
11297 EXT(glEdgeFlagFormatNV),
11298 EXT(glSecondaryColorFormatNV),
11299 EXT(glFogCoordFormatNV),
11300 EXT(glVertexAttribFormatNV),
11301 EXT(glVertexAttribIFormatNV),
11302 EXT(glGetIntegerui64i_vNV),
11303 EXT(glAreProgramsResidentNV),
11304 EXT(glBindProgramNV),
11305 EXT(glDeleteProgramsNV),
11306 EXT(glExecuteProgramNV),
11307 EXT(glGenProgramsNV),
11308 EXT(glGetProgramParameterdvNV),
11309 EXT(glGetProgramParameterfvNV),
11310 EXT(glGetProgramivNV),
11311 EXT(glGetProgramStringNV),
11312 EXT(glGetTrackMatrixivNV),
11313 EXT(glGetVertexAttribdvNV),
11314 EXT(glGetVertexAttribfvNV),
11315 EXT(glGetVertexAttribivNV),
11316 EXT(glGetVertexAttribPointervNV),
11317 EXT(glIsProgramNV),
11318 EXT(glLoadProgramNV),
11319 EXT(glProgramParameter4dNV),
11320 EXT(glProgramParameter4dvNV),
11321 EXT(glProgramParameter4fNV),
11322 EXT(glProgramParameter4fvNV),
11323 EXT(glProgramParameters4dvNV),
11324 EXT(glProgramParameters4fvNV),
11325 EXT(glRequestResidentProgramsNV),
11326 EXT(glTrackMatrixNV),
11327 EXT(glVertexAttribPointerNV),
11328 EXT(glVertexAttrib1dNV),
11329 EXT(glVertexAttrib1dvNV),
11330 EXT(glVertexAttrib1fNV),
11331 EXT(glVertexAttrib1fvNV),
11332 EXT(glVertexAttrib1sNV),
11333 EXT(glVertexAttrib1svNV),
11334 EXT(glVertexAttrib2dNV),
11335 EXT(glVertexAttrib2dvNV),
11336 EXT(glVertexAttrib2fNV),
11337 EXT(glVertexAttrib2fvNV),
11338 EXT(glVertexAttrib2sNV),
11339 EXT(glVertexAttrib2svNV),
11340 EXT(glVertexAttrib3dNV),
11341 EXT(glVertexAttrib3dvNV),
11342 EXT(glVertexAttrib3fNV),
11343 EXT(glVertexAttrib3fvNV),
11344 EXT(glVertexAttrib3sNV),
11345 EXT(glVertexAttrib3svNV),
11346 EXT(glVertexAttrib4dNV),
11347 EXT(glVertexAttrib4dvNV),
11348 EXT(glVertexAttrib4fNV),
11349 EXT(glVertexAttrib4fvNV),
11350 EXT(glVertexAttrib4sNV),
11351 EXT(glVertexAttrib4svNV),
11352 EXT(glVertexAttrib4ubNV),
11353 EXT(glVertexAttrib4ubvNV),
11354 EXT(glVertexAttribs1dvNV),
11355 EXT(glVertexAttribs1fvNV),
11356 EXT(glVertexAttribs1svNV),
11357 EXT(glVertexAttribs2dvNV),
11358 EXT(glVertexAttribs2fvNV),
11359 EXT(glVertexAttribs2svNV),
11360 EXT(glVertexAttribs3dvNV),
11361 EXT(glVertexAttribs3fvNV),
11362 EXT(glVertexAttribs3svNV),
11363 EXT(glVertexAttribs4dvNV),
11364 EXT(glVertexAttribs4fvNV),
11365 EXT(glVertexAttribs4svNV),
11366 EXT(glVertexAttribs4ubvNV),
11367
Nicolas Capensa9b49372015-01-30 00:33:26 -050011368 // ARB
11369 EXT(wglGetExtensionsStringARB),
11370 EXT(glIsRenderbuffer),
11371 EXT(glBindRenderbuffer),
11372 EXT(glDeleteRenderbuffers),
11373 EXT(glGenRenderbuffers),
11374 EXT(glRenderbufferStorage),
11375 EXT(glRenderbufferStorageMultisample),
11376 EXT(glGetRenderbufferParameteriv),
11377 EXT(glIsFramebuffer),
11378 EXT(glBindFramebuffer),
11379 EXT(glDeleteFramebuffers),
11380 EXT(glGenFramebuffers),
11381 EXT(glCheckFramebufferStatus),
11382 EXT(glFramebufferTexture1D),
11383 EXT(glFramebufferTexture2D),
11384 EXT(glFramebufferTexture3D),
11385 EXT(glFramebufferTextureLayer),
11386 EXT(glFramebufferRenderbuffer),
11387 EXT(glGetFramebufferAttachmentParameteriv),
11388 EXT(glBlitFramebuffer),
11389 EXT(glGenerateMipmap),
Nicolas Capens264f1522015-01-09 17:21:17 -050011390
Nicolas Capensa9b49372015-01-30 00:33:26 -050011391 // EXT
11392 EXT(wglSwapIntervalEXT),
11393 EXT(wglGetExtensionsStringEXT),
Maxime Grégoire20942c02015-07-16 14:12:47 -040011394
11395 //UNIMPLEMENTEDg
11396 EXT(wglGetSwapIntervalEXT),
11397#undef EXT
Nicolas Capens264f1522015-01-09 17:21:17 -050011398 };
11399
Maxime Grégoire20942c02015-07-16 14:12:47 -040011400 std::set<const char *> setset;
11401 for(int ext = 0; ext < sizeof(glExtensions) / sizeof(Extension); ext++)
11402 {
11403 int size = setset.size();
11404 setset.insert(glExtensions[ext].name);
11405 if(size == setset.size())
11406 {
11407 size = size;
11408 }
11409 }
11410
Nicolas Capens264f1522015-01-09 17:21:17 -050011411 for(int ext = 0; ext < sizeof(glExtensions) / sizeof(Extension); ext++)
11412 {
Nicolas Capensa9b49372015-01-30 00:33:26 -050011413 if(strcmp(lpszProc, glExtensions[ext].name) == 0)
Nicolas Capens264f1522015-01-09 17:21:17 -050011414 {
Nicolas Capensa9b49372015-01-30 00:33:26 -050011415 return (PROC)glExtensions[ext].address;
Nicolas Capens264f1522015-01-09 17:21:17 -050011416 }
11417 }
11418
Nicolas Capensa9b49372015-01-30 00:33:26 -050011419 FARPROC proc = GetProcAddress(GetModuleHandle("opengl32.dll"), lpszProc); // FIXME?
11420
11421 if(proc)
11422 {
11423 return proc;
11424 }
11425
11426 TRACE("(LPCSTR lpszProc = \"%s\") NOT FOUND!!!", lpszProc);
11427
Maxime Grégoire20942c02015-07-16 14:12:47 -040011428 return (PROC)glIsQueryEXT;
Nicolas Capens264f1522015-01-09 17:21:17 -050011429}
11430
Nicolas Capensa9b49372015-01-30 00:33:26 -050011431BOOL WINAPI wglMakeCurrent(HDC hdc, HGLRC hglrc)
11432{
11433 TRACE("(*)");
11434
11435 if(hdc && hglrc)
11436 {
11437 gl::Display *display = (gl::Display*)gl::Display::getDisplay(hdc);
11438 gl::makeCurrent((gl::Context*)hglrc, display, display->getPrimarySurface());
11439 gl::setCurrentDrawSurface(display->getPrimarySurface());
11440 gl::setCurrentDisplay(display);
11441 }
11442 else
11443 {
11444 gl::makeCurrent(0, 0, 0);
11445 }
11446
11447 return TRUE;
11448}
11449
11450BOOL WINAPI wglRealizeLayerPalette(HDC, int, BOOL)
11451{
11452 UNIMPLEMENTED();
11453 return FALSE;
11454}
11455
11456int WINAPI wglSetLayerPaletteEntries(HDC, int, int, int, CONST COLORREF*)
11457{
11458 UNIMPLEMENTED();
11459 return 0;
11460}
11461
11462BOOL WINAPI wglSetPixelFormat(HDC hdc, int iPixelFormat, const PIXELFORMATDESCRIPTOR *ppfd)
11463{
11464 TRACE("(*)");
11465 //UNIMPLEMENTED();
11466
11467 return TRUE;
11468}
11469
Maxime Grégoire20942c02015-07-16 14:12:47 -040011470BOOL WINAPI wglShareLists(HGLRC hglrc1, HGLRC hglrc2)
Nicolas Capensa9b49372015-01-30 00:33:26 -050011471{
Maxime Grégoire20942c02015-07-16 14:12:47 -040011472 TRACE("*");
11473 return TRUE;
Nicolas Capensa9b49372015-01-30 00:33:26 -050011474}
11475
Maxime Gregoirea5fbca02015-02-12 16:52:54 -050011476BOOL WINAPI wglSwapBuffers(HDC hdc)
Nicolas Capensa9b49372015-01-30 00:33:26 -050011477{
11478 TRACE("(*)");
Maxime Grégoire20942c02015-07-16 14:12:47 -040011479
Nicolas Capensa9b49372015-01-30 00:33:26 -050011480 gl::Display *display = gl::getDisplay();
Maxime Grégoire20942c02015-07-16 14:12:47 -040011481
Nicolas Capensa9b49372015-01-30 00:33:26 -050011482 if(display)
11483 {
11484 display->getPrimarySurface()->swap();
Maxime Gregoirea5fbca02015-02-12 16:52:54 -050011485 return TRUE;
Nicolas Capensa9b49372015-01-30 00:33:26 -050011486 }
Maxime Gregoirea5fbca02015-02-12 16:52:54 -050011487
11488 return FALSE;
Nicolas Capensa9b49372015-01-30 00:33:26 -050011489}
11490
11491BOOL WINAPI wglSwapLayerBuffers(HDC, UINT)
11492{
11493 UNIMPLEMENTED();
11494 return FALSE;
11495}
11496
11497DWORD WINAPI wglSwapMultipleBuffers(UINT, CONST WGLSWAP*)
11498{
11499 UNIMPLEMENTED();
11500 return 0;
11501}
11502
11503BOOL WINAPI wglUseFontBitmapsA(HDC, DWORD, DWORD, DWORD)
11504{
11505 UNIMPLEMENTED();
11506 return FALSE;
11507}
11508
11509BOOL WINAPI wglUseFontBitmapsW(HDC, DWORD, DWORD, DWORD)
11510{
11511 UNIMPLEMENTED();
11512 return FALSE;
11513}
11514
11515BOOL WINAPI wglUseFontOutlinesA(HDC, DWORD, DWORD, DWORD, FLOAT, FLOAT, int, LPGLYPHMETRICSFLOAT)
11516{
11517 UNIMPLEMENTED();
11518 return FALSE;
11519}
11520
11521BOOL WINAPI wglUseFontOutlinesW(HDC, DWORD, DWORD, DWORD, FLOAT, FLOAT, int, LPGLYPHMETRICSFLOAT)
11522{
11523 UNIMPLEMENTED();
11524 return FALSE;
11525}
11526
11527void APIENTRY Register(const char *licenseKey)
Nicolas Capens264f1522015-01-09 17:21:17 -050011528{
11529 RegisterLicenseKey(licenseKey);
11530}
11531
Maxime Grégoire20942c02015-07-16 14:12:47 -040011532}