Changeset 43051 in vbox for trunk/src/VBox/GuestHost/OpenGL/state_tracker
- Timestamp:
- Aug 28, 2012 3:35:26 PM (13 years ago)
- svn:sync-xref-src-repo-rev:
- 80386
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/GuestHost/OpenGL/state_tracker/state_glsl.c
r41928 r43051 200 200 { 201 201 CRGLSLShader *pShader = crStateGetShaderObj(id); 202 #ifdef IN_GUEST 203 CRASSERT(!pShader || pShader->hwid == id); 204 #endif 202 205 return pShader ? pShader->hwid : 0; 203 206 } … … 206 209 { 207 210 CRGLSLProgram *pProgram = crStateGetProgramObj(id); 211 #ifdef IN_GUEST 208 212 CRASSERT(!pProgram || pProgram->hwid == id); 213 #endif 209 214 return pProgram ? pProgram->hwid : 0; 210 215 } … … 254 259 } 255 260 256 DECLEXPORT( void) STATE_APIENTRY crStateCreateShader(GLuintid, GLenum type)261 DECLEXPORT(GLuint) STATE_APIENTRY crStateCreateShader(GLuint hwid, GLenum type) 257 262 { 258 263 CRGLSLShader *pShader; 259 264 CRContext *g = GetCurrentContext(); 260 261 CRASSERT(!crStateGetShaderObj(id)); 265 GLuint stateId = hwid; 266 267 #ifdef IN_GUEST 268 CRASSERT(!crStateGetShaderObj(stateId)); 269 #else 270 /* the id may not necesserily be hwid after save state restoration */ 271 while ((pShader = crStateGetShaderObj(stateId)) != NULL) 272 { 273 GLuint newStateId = stateId + 7; 274 crDebug("Shader object %d already exists, generating a new one, %d", stateId, newStateId); 275 stateId = newStateId; 276 } 277 #endif 262 278 263 279 pShader = (CRGLSLShader *) crAlloc(sizeof(*pShader)); … … 268 284 } 269 285 270 pShader->id = id;271 pShader->hwid = id;286 pShader->id = stateId; 287 pShader->hwid = hwid; 272 288 pShader->type = type; 273 289 pShader->source = NULL; … … 276 292 pShader->refCount = 0; 277 293 278 crHashtableAdd(g->glsl.shaders, id, pShader); 279 } 280 281 DECLEXPORT(void) STATE_APIENTRY crStateCreateProgram(GLuint id) 294 crHashtableAdd(g->glsl.shaders, stateId, pShader); 295 296 return stateId; 297 } 298 299 DECLEXPORT(GLuint) STATE_APIENTRY crStateCreateProgram(GLuint hwid) 282 300 { 283 301 CRGLSLProgram *pProgram; 284 302 CRContext *g = GetCurrentContext(); 285 286 pProgram = crStateGetProgramObj(id); 303 GLuint stateId = hwid; 304 305 #ifdef IN_GUEST 306 pProgram = crStateGetProgramObj(stateId); 287 307 if (pProgram) 288 308 { 289 crWarning("Program object %d already exists!", id); 290 crStateDeleteProgram(id); 291 CRASSERT(!crStateGetProgramObj(id)); 292 } 309 crWarning("Program object %d already exists!", stateId); 310 crStateDeleteProgram(stateId); 311 CRASSERT(!crStateGetProgramObj(stateId)); 312 } 313 #else 314 /* the id may not necesserily be hwid after save state restoration */ 315 while ((pProgram = crStateGetProgramObj(stateId)) != NULL) 316 { 317 GLuint newStateId = stateId + 7; 318 crDebug("Program object %d already exists, generating a new one, %d", stateId, newStateId); 319 stateId = newStateId; 320 } 321 #endif 293 322 294 323 pProgram = (CRGLSLProgram *) crAlloc(sizeof(*pProgram)); … … 299 328 } 300 329 301 pProgram->id = id;302 pProgram->hwid = id;330 pProgram->id = stateId; 331 pProgram->hwid = hwid; 303 332 pProgram->validated = GL_FALSE; 304 333 pProgram->linked = GL_FALSE; … … 318 347 #endif 319 348 320 crHashtableAdd(g->glsl.programs, id, pProgram); 349 crHashtableAdd(g->glsl.programs, stateId, pProgram); 350 351 return stateId; 321 352 } 322 353
Note:
See TracChangeset
for help on using the changeset viewer.