Changeset 3493 in vbox for trunk/src/VBox/Additions/WINNT/Graphics/OpenGL
- Timestamp:
- Jul 6, 2007 3:33:06 PM (18 years ago)
- svn:sync-xref-src-repo-rev:
- 22709
- Location:
- trunk/src/VBox/Additions/WINNT/Graphics/OpenGL
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Additions/WINNT/Graphics/OpenGL/OGLComplexAsync.cpp
r3339 r3493 277 277 278 278 279 280 /** @todo might not work as the caller could change the array contents afterwards */ 279 void APIENTRY glDisableClientState(GLenum type) 280 { 281 PVBOX_OGL_THREAD_CTX pCtx = VBoxOGLGetThreadCtx(); 282 switch(type) 283 { 284 case GL_VERTEX_ARRAY: 285 pCtx->Pointer[VBOX_OGL_DRAWELEMENT_VERTEX].fValid = false; 286 break; 287 case GL_NORMAL_ARRAY: 288 pCtx->Pointer[VBOX_OGL_DRAWELEMENT_NORMAL].fValid = false; 289 break; 290 case GL_COLOR_ARRAY: 291 pCtx->Pointer[VBOX_OGL_DRAWELEMENT_COLOR].fValid = false; 292 break; 293 case GL_INDEX_ARRAY: 294 pCtx->Pointer[VBOX_OGL_DRAWELEMENT_INDEX].fValid = false; 295 break; 296 case GL_TEXTURE_COORD_ARRAY: 297 pCtx->Pointer[VBOX_OGL_DRAWELEMENT_TEXCOORD].fValid = false; 298 break; 299 case GL_EDGE_FLAG_ARRAY: 300 pCtx->Pointer[VBOX_OGL_DRAWELEMENT_EDGEFLAG].fValid = false; 301 break; 302 default: 303 AssertMsgFailed(("invalid type %x\n", type)); 304 break; 305 } 306 VBOX_OGL_GEN_OP1(DisableClientState, type); 307 } 308 309 void APIENTRY glEnableClientState(GLenum type) 310 { 311 PVBOX_OGL_THREAD_CTX pCtx = VBoxOGLGetThreadCtx(); 312 switch(type) 313 { 314 case GL_VERTEX_ARRAY: 315 pCtx->Pointer[VBOX_OGL_DRAWELEMENT_VERTEX].fValid = true; 316 break; 317 case GL_NORMAL_ARRAY: 318 pCtx->Pointer[VBOX_OGL_DRAWELEMENT_NORMAL].fValid = true; 319 break; 320 case GL_COLOR_ARRAY: 321 pCtx->Pointer[VBOX_OGL_DRAWELEMENT_COLOR].fValid = true; 322 break; 323 case GL_INDEX_ARRAY: 324 pCtx->Pointer[VBOX_OGL_DRAWELEMENT_INDEX].fValid = true; 325 break; 326 case GL_TEXTURE_COORD_ARRAY: 327 pCtx->Pointer[VBOX_OGL_DRAWELEMENT_TEXCOORD].fValid = true; 328 break; 329 case GL_EDGE_FLAG_ARRAY: 330 pCtx->Pointer[VBOX_OGL_DRAWELEMENT_EDGEFLAG].fValid = true; 331 break; 332 default: 333 AssertMsgFailed(("invalid type %x\n", type)); 334 break; 335 } 336 VBOX_OGL_GEN_OP1(EnableClientState, type); 337 } 338 281 339 void APIENTRY glVertexPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer) 282 340 { 341 PVBOX_OGL_THREAD_CTX pCtx = VBoxOGLGetThreadCtx(); 342 283 343 if (size < 2 || size > 4) 284 344 { … … 288 348 289 349 GLint cbDataType = glVBoxGetDataTypeSize(type); 290 291 350 if (!cbDataType) 292 351 { … … 295 354 } 296 355 297 GLint cVertex = glInternalGetIntegerv(GL_VERTEX_ARRAY_COUNT_EXT);298 356 GLint minStride = size*cbDataType; 299 300 if ( cVertex <= 0 301 || stride < minStride) 357 if (stride < minStride) 302 358 { 303 359 glLogError(GL_INVALID_VALUE); … … 308 364 stride = minStride; 309 365 310 VBOX_OGL_GEN_OP4PTR(VertexPointer, size, type, stride, stride * cVertex, pointer); 311 return; 312 } 313 314 /** @todo might not work as the caller could change the array contents afterwards */ 366 pCtx->Pointer[VBOX_OGL_DRAWELEMENT_VERTEX].pointer = pointer; 367 pCtx->Pointer[VBOX_OGL_DRAWELEMENT_VERTEX].size = size; 368 pCtx->Pointer[VBOX_OGL_DRAWELEMENT_VERTEX].stride = stride; 369 pCtx->Pointer[VBOX_OGL_DRAWELEMENT_VERTEX].type = type; 370 pCtx->Pointer[VBOX_OGL_DRAWELEMENT_VERTEX].cbDataType = cbDataType; 371 return; 372 } 373 315 374 void APIENTRY glTexCoordPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer) 316 375 { 376 PVBOX_OGL_THREAD_CTX pCtx = VBoxOGLGetThreadCtx(); 317 377 if (size < 1 || size > 4) 318 378 { … … 329 389 } 330 390 331 GLint cTexCoord = glInternalGetIntegerv(GL_TEXTURE_COORD_ARRAY_COUNT_EXT);332 391 GLint minStride = size*cbDataType; 333 392 334 if ( cTexCoord <= 0 335 || stride < minStride) 393 if (stride < minStride) 336 394 { 337 395 glLogError(GL_INVALID_VALUE); … … 342 400 stride = minStride; 343 401 344 VBOX_OGL_GEN_OP4PTR(TexCoordPointer, size, type, stride, stride * cTexCoord, pointer); 402 pCtx->Pointer[VBOX_OGL_DRAWELEMENT_TEXCOORD].pointer = pointer; 403 pCtx->Pointer[VBOX_OGL_DRAWELEMENT_TEXCOORD].size = size; 404 pCtx->Pointer[VBOX_OGL_DRAWELEMENT_TEXCOORD].stride = stride; 405 pCtx->Pointer[VBOX_OGL_DRAWELEMENT_TEXCOORD].type = type; 406 pCtx->Pointer[VBOX_OGL_DRAWELEMENT_TEXCOORD].cbDataType = cbDataType; 345 407 return; 346 408 } … … 349 411 void APIENTRY glColorPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer) 350 412 { 413 PVBOX_OGL_THREAD_CTX pCtx = VBoxOGLGetThreadCtx(); 351 414 if (size < 3 || size > 4) 352 415 { … … 363 426 } 364 427 365 GLint cColors = glInternalGetIntegerv(GL_COLOR_ARRAY_COUNT_EXT);366 428 GLint minStride = size*cbDataType; 367 429 368 if ( cColors <= 0 369 || stride < minStride) 430 if (stride < minStride) 370 431 { 371 432 glLogError(GL_INVALID_VALUE); … … 376 437 stride = minStride; 377 438 378 VBOX_OGL_GEN_OP4PTR(ColorPointer, size, type, stride, stride * cColors, pointer); 379 return; 380 } 381 382 /** @todo might not work as the caller could change the array contents afterwards */ 439 pCtx->Pointer[VBOX_OGL_DRAWELEMENT_COLOR].pointer = pointer; 440 pCtx->Pointer[VBOX_OGL_DRAWELEMENT_COLOR].size = size; 441 pCtx->Pointer[VBOX_OGL_DRAWELEMENT_COLOR].stride = stride; 442 pCtx->Pointer[VBOX_OGL_DRAWELEMENT_COLOR].type = type; 443 pCtx->Pointer[VBOX_OGL_DRAWELEMENT_COLOR].cbDataType = cbDataType; 444 return; 445 } 446 383 447 void APIENTRY glEdgeFlagPointer (GLsizei stride, const GLvoid *pointer) 384 448 { 385 GLint cEdgeFlag = glInternalGetIntegerv(GL_EDGE_FLAG_ARRAY_COUNT_EXT);449 PVBOX_OGL_THREAD_CTX pCtx = VBoxOGLGetThreadCtx(); 386 450 GLint minStride = sizeof(GLboolean); 387 451 388 if ( cEdgeFlag <= 0 389 || stride < minStride) 452 if (stride < minStride) 390 453 { 391 454 glLogError(GL_INVALID_VALUE); … … 396 459 stride = minStride; 397 460 398 VBOX_OGL_GEN_OP2PTR(EdgeFlagPointer, stride, stride * cEdgeFlag, pointer); 399 return; 400 } 401 402 /** @todo might not work as the caller could change the array contents afterwards */ 461 pCtx->Pointer[VBOX_OGL_DRAWELEMENT_EDGEFLAG].size = 1; 462 pCtx->Pointer[VBOX_OGL_DRAWELEMENT_EDGEFLAG].pointer = pointer; 463 pCtx->Pointer[VBOX_OGL_DRAWELEMENT_EDGEFLAG].stride = stride; 464 pCtx->Pointer[VBOX_OGL_DRAWELEMENT_EDGEFLAG].cbDataType = sizeof(GLboolean); 465 return; 466 } 467 403 468 void APIENTRY glIndexPointer (GLenum type, GLsizei stride, const GLvoid *pointer) 404 469 { 470 PVBOX_OGL_THREAD_CTX pCtx = VBoxOGLGetThreadCtx(); 405 471 GLint cbDataType = glVBoxGetDataTypeSize(type); 406 472 … … 411 477 } 412 478 413 GLint cIndexPtr = glInternalGetIntegerv(GL_INDEX_ARRAY_COUNT_EXT);414 479 GLint minStride = cbDataType; 415 480 416 if ( cIndexPtr <= 0 417 || stride < minStride) 481 if (stride < minStride) 418 482 { 419 483 glLogError(GL_INVALID_VALUE); … … 424 488 stride = minStride; 425 489 426 VBOX_OGL_GEN_OP3PTR(IndexPointer, type, stride, stride * cIndexPtr, pointer); 427 } 428 429 /** @todo might not work as the caller could change the array contents afterwards */ 490 pCtx->Pointer[VBOX_OGL_DRAWELEMENT_INDEX].size = 1; 491 pCtx->Pointer[VBOX_OGL_DRAWELEMENT_INDEX].pointer = pointer; 492 pCtx->Pointer[VBOX_OGL_DRAWELEMENT_INDEX].stride = stride; 493 pCtx->Pointer[VBOX_OGL_DRAWELEMENT_INDEX].type = type; 494 pCtx->Pointer[VBOX_OGL_DRAWELEMENT_INDEX].cbDataType = cbDataType; 495 } 496 430 497 void APIENTRY glNormalPointer (GLenum type, GLsizei stride, const GLvoid *pointer) 431 498 { 499 PVBOX_OGL_THREAD_CTX pCtx = VBoxOGLGetThreadCtx(); 432 500 GLint cbDataType = glVBoxGetDataTypeSize(type); 433 501 … … 439 507 440 508 GLint minStride = cbDataType; 441 GLint cNormal = glInternalGetIntegerv(GL_NORMAL_ARRAY_COUNT_EXT); 442 443 if ( cNormal <= 0 444 || stride < minStride) 509 510 if (stride < minStride) 445 511 { 446 512 glLogError(GL_INVALID_VALUE); … … 451 517 stride = minStride; 452 518 453 VBOX_OGL_GEN_OP3PTR(NormalPointer, type, stride, stride * cNormal, pointer); 519 pCtx->Pointer[VBOX_OGL_DRAWELEMENT_NORMAL].size = 1; 520 pCtx->Pointer[VBOX_OGL_DRAWELEMENT_NORMAL].pointer = pointer; 521 pCtx->Pointer[VBOX_OGL_DRAWELEMENT_NORMAL].stride = stride; 522 pCtx->Pointer[VBOX_OGL_DRAWELEMENT_NORMAL].type = type; 523 pCtx->Pointer[VBOX_OGL_DRAWELEMENT_NORMAL].cbDataType = cbDataType; 454 524 return; 455 525 } -
trunk/src/VBox/Additions/WINNT/Graphics/OpenGL/OGLComplexSync.cpp
r3438 r3493 79 79 void APIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices) 80 80 { 81 if (!count) 82 return; /* no error?? */ 83 81 84 AssertFailed(); 82 85 return; -
trunk/src/VBox/Additions/WINNT/Graphics/OpenGL/OGLSimpleAsync.cpp
r3339 r3493 158 158 159 159 GL_GEN_VPAR_FUNC2(DepthRange, GLclampd, GLclampd); 160 GL_GEN_FUNC1(DisableClientState, GLenum);161 GL_GEN_FUNC1(EnableClientState, GLenum);162 160 GL_GEN_VPAR_FUNC3(EvalMesh1, GLenum, GLint, GLint); 163 161 GL_GEN_VPAR_FUNC5(EvalMesh2, GLenum, GLint, GLint, GLint, GLint); -
trunk/src/VBox/Additions/WINNT/Graphics/OpenGL/VBoxOGL.h
r3468 r3493 48 48 } VBOX_OGL_CTX, *PVBOX_OGL_CTX; 49 49 50 /* glDrawElement internal state */ 51 #define VBOX_OGL_DRAWELEMENT_VERTEX 0 52 #define VBOX_OGL_DRAWELEMENT_TEXCOORD 1 53 #define VBOX_OGL_DRAWELEMENT_COLOR 2 54 #define VBOX_OGL_DRAWELEMENT_EDGEFLAG 3 55 #define VBOX_OGL_DRAWELEMENT_INDEX 4 56 #define VBOX_OGL_DRAWELEMENT_NORMAL 5 57 #define VBOX_OGL_DRAWELEMENT_MAX 6 58 59 typedef struct 60 { 61 GLint size; 62 GLenum type; 63 GLsizei stride; 64 uint32_t cbDataType; 65 const GLvoid *pointer; 66 bool fValid; 67 } VBOX_OGL_DRAWELEMENT; 68 50 69 typedef struct 51 70 { … … 57 76 uint8_t *pCmdBufferEnd; 58 77 uint8_t *pCurrentCmd; 78 79 /* Internal OpenGL state variables */ 80 VBOX_OGL_DRAWELEMENT Pointer[VBOX_OGL_DRAWELEMENT_MAX]; 81 59 82 } VBOX_OGL_THREAD_CTX, *PVBOX_OGL_THREAD_CTX; 60 83
Note:
See TracChangeset
for help on using the changeset viewer.