VirtualBox

Ignore:
Timestamp:
Jul 6, 2007 3:33:06 PM (18 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
22709
Message:

Updates

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  
    277277
    278278
    279 
    280 /** @todo might not work as the caller could change the array contents afterwards */
     279void 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
     309void 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
    281339void APIENTRY glVertexPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)
    282340{
     341    PVBOX_OGL_THREAD_CTX pCtx = VBoxOGLGetThreadCtx();
     342
    283343    if (size < 2 || size > 4)
    284344    {
     
    288348
    289349    GLint cbDataType = glVBoxGetDataTypeSize(type);
    290 
    291350    if (!cbDataType)
    292351    {
     
    295354    }
    296355
    297     GLint cVertex   = glInternalGetIntegerv(GL_VERTEX_ARRAY_COUNT_EXT);
    298356    GLint minStride = size*cbDataType;
    299 
    300     if (    cVertex <= 0
    301         ||  stride < minStride)
     357    if (stride < minStride)
    302358    {
    303359        glLogError(GL_INVALID_VALUE);
     
    308364        stride = minStride;
    309365
    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
    315374void APIENTRY glTexCoordPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)
    316375{
     376    PVBOX_OGL_THREAD_CTX pCtx = VBoxOGLGetThreadCtx();
    317377    if (size < 1 || size > 4)
    318378    {
     
    329389    }
    330390
    331     GLint cTexCoord = glInternalGetIntegerv(GL_TEXTURE_COORD_ARRAY_COUNT_EXT);
    332391    GLint minStride = size*cbDataType;
    333392
    334     if (    cTexCoord <= 0
    335         ||  stride < minStride)
     393    if (stride < minStride)
    336394    {
    337395        glLogError(GL_INVALID_VALUE);
     
    342400        stride = minStride;
    343401
    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;
    345407    return;
    346408}
     
    349411void APIENTRY glColorPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)
    350412{
     413    PVBOX_OGL_THREAD_CTX pCtx = VBoxOGLGetThreadCtx();
    351414    if (size < 3 || size > 4)
    352415    {
     
    363426    }
    364427
    365     GLint cColors   = glInternalGetIntegerv(GL_COLOR_ARRAY_COUNT_EXT);
    366428    GLint minStride = size*cbDataType;
    367429
    368     if (    cColors <= 0
    369         ||  stride < minStride)
     430    if (stride < minStride)
    370431    {
    371432        glLogError(GL_INVALID_VALUE);
     
    376437        stride = minStride;
    377438
    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
    383447void APIENTRY glEdgeFlagPointer (GLsizei stride, const GLvoid *pointer)
    384448{
    385     GLint cEdgeFlag = glInternalGetIntegerv(GL_EDGE_FLAG_ARRAY_COUNT_EXT);
     449    PVBOX_OGL_THREAD_CTX pCtx = VBoxOGLGetThreadCtx();
    386450    GLint minStride = sizeof(GLboolean);
    387451
    388     if (    cEdgeFlag <= 0
    389         ||  stride < minStride)
     452    if (stride < minStride)
    390453    {
    391454        glLogError(GL_INVALID_VALUE);
     
    396459        stride = minStride;
    397460
    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
    403468void APIENTRY glIndexPointer (GLenum type, GLsizei stride, const GLvoid *pointer)
    404469{
     470    PVBOX_OGL_THREAD_CTX pCtx = VBoxOGLGetThreadCtx();
    405471    GLint cbDataType = glVBoxGetDataTypeSize(type);
    406472
     
    411477    }
    412478
    413     GLint cIndexPtr = glInternalGetIntegerv(GL_INDEX_ARRAY_COUNT_EXT);
    414479    GLint minStride = cbDataType;
    415480
    416     if (    cIndexPtr <= 0
    417         ||  stride < minStride)
     481    if (stride < minStride)
    418482    {
    419483        glLogError(GL_INVALID_VALUE);
     
    424488        stride = minStride;
    425489
    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
    430497void APIENTRY glNormalPointer (GLenum type, GLsizei stride, const GLvoid *pointer)
    431498{
     499    PVBOX_OGL_THREAD_CTX pCtx = VBoxOGLGetThreadCtx();
    432500    GLint cbDataType = glVBoxGetDataTypeSize(type);
    433501
     
    439507
    440508    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)
    445511    {
    446512        glLogError(GL_INVALID_VALUE);
     
    451517        stride = minStride;
    452518
    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;
    454524    return;
    455525}
  • trunk/src/VBox/Additions/WINNT/Graphics/OpenGL/OGLComplexSync.cpp

    r3438 r3493  
    7979void APIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices)
    8080{
     81    if (!count)
     82        return; /* no error?? */
     83
    8184    AssertFailed();
    8285    return;
  • trunk/src/VBox/Additions/WINNT/Graphics/OpenGL/OGLSimpleAsync.cpp

    r3339 r3493  
    158158
    159159GL_GEN_VPAR_FUNC2(DepthRange,       GLclampd,   GLclampd);
    160 GL_GEN_FUNC1(DisableClientState,    GLenum);
    161 GL_GEN_FUNC1(EnableClientState,     GLenum);
    162160GL_GEN_VPAR_FUNC3(EvalMesh1,        GLenum,     GLint,      GLint);
    163161GL_GEN_VPAR_FUNC5(EvalMesh2,        GLenum,     GLint,      GLint,  GLint,  GLint);
  • trunk/src/VBox/Additions/WINNT/Graphics/OpenGL/VBoxOGL.h

    r3468 r3493  
    4848} VBOX_OGL_CTX, *PVBOX_OGL_CTX;
    4949
     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
     59typedef 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
    5069typedef struct
    5170{
     
    5776    uint8_t        *pCmdBufferEnd;
    5877    uint8_t        *pCurrentCmd;
     78
     79    /* Internal OpenGL state variables */
     80    VBOX_OGL_DRAWELEMENT    Pointer[VBOX_OGL_DRAWELEMENT_MAX];
     81
    5982} VBOX_OGL_THREAD_CTX, *PVBOX_OGL_THREAD_CTX;
    6083
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette