Lines Matching refs:pProgram

61 static void crStateFreeProgramAttribsLocationCache(CRGLSLProgram* pProgram)
63 if (pProgram->pAttribs) crFree(pProgram->pAttribs);
65 pProgram->pAttribs = NULL;
66 pProgram->cAttribs = 0;
70 static void crStateFreeProgramAttribs(CRGLSLProgram* pProgram)
74 for (i=0; i<pProgram->activeState.cAttribs; ++i)
76 crFree(pProgram->activeState.pAttribs[i].name);
79 for (i=0; i<pProgram->currentState.cAttribs; ++i)
81 crFree(pProgram->currentState.pAttribs[i].name);
84 if (pProgram->activeState.pAttribs)
85 crFree(pProgram->activeState.pAttribs);
87 if (pProgram->currentState.pAttribs)
88 crFree(pProgram->currentState.pAttribs);
91 crStateFreeProgramAttribsLocationCache(pProgram);
93 pProgram->bAttribsSynced = GL_FALSE;
98 static void crStateFreeProgramUniforms(CRGLSLProgram* pProgram)
102 for (i=0; i<pProgram->cUniforms; ++i)
104 if (pProgram->pUniforms[i].name) crFree(pProgram->pUniforms[i].name);
105 if (pProgram->pUniforms[i].data) crFree(pProgram->pUniforms[i].data);
108 if (pProgram->pUniforms) crFree(pProgram->pUniforms);
110 pProgram->pUniforms = NULL;
111 pProgram->cUniforms = 0;
114 pProgram->bUniformsSynced = GL_FALSE;
154 CRGLSLProgram* pProgram = (CRGLSLProgram *) data;
156 crFreeHashtable(pProgram->currentState.attachedShaders, crStateShaderDecRefCount);
158 if (pProgram->activeState.attachedShaders)
161 crHashtableWalk(pProgram->activeState.attachedShaders, crStateFakeDecRefCountCB, g);
162 crFreeHashtable(pProgram->activeState.attachedShaders, crStateFreeGLSLShader);
165 crStateFreeProgramAttribs(pProgram);
167 crStateFreeProgramUniforms(pProgram);
169 crFree(pProgram);
227 CRGLSLProgram *pProgram = crStateGetProgramObj(id);
229 CRASSERT(!pProgram || pProgram->hwid == id);
231 return pProgram ? pProgram->hwid : 0;
246 CRGLSLProgram *pProgram = (CRGLSLProgram *) data1;
250 if (pProgram->hwid==pParms->hwid)
251 pParms->id = pProgram->id;
337 CRGLSLProgram *pProgram;
342 pProgram = crStateGetProgramObj(stateId);
343 if (pProgram)
358 pProgram = (CRGLSLProgram *) crAlloc(sizeof(*pProgram));
359 if (!pProgram)
365 pProgram->id = stateId;
366 pProgram->hwid = hwid;
367 pProgram->validated = GL_FALSE;
368 pProgram->linked = GL_FALSE;
369 pProgram->deleted = GL_FALSE;
370 pProgram->activeState.attachedShaders = NULL;
371 pProgram->currentState.attachedShaders = crAllocHashtable();
373 pProgram->activeState.cAttribs = 0;
374 pProgram->activeState.pAttribs = NULL;
375 pProgram->currentState.cAttribs = 0;
376 pProgram->currentState.pAttribs = NULL;
378 pProgram->pUniforms = NULL;
379 pProgram->cUniforms = 0;
382 pProgram->pAttribs = NULL;
383 pProgram->cAttribs = 0;
385 pProgram->bUniformsSynced = GL_FALSE;
386 pProgram->bAttribsSynced = GL_FALSE;
389 crHashtableAdd(g->glsl.programs, stateId, pProgram);
435 CRGLSLProgram *pProgram = crStateGetProgramObj(program);
438 if (!pProgram)
444 if (crHashtableSearch(pProgram->currentState.attachedShaders, shader))
460 crHashtableAdd(pProgram->currentState.attachedShaders, shader, pShader);
465 CRGLSLProgram *pProgram = crStateGetProgramObj(program);
468 if (!pProgram)
474 pShader = (CRGLSLShader *) crHashtableSearch(pProgram->currentState.attachedShaders, shader);
481 crHashtableDelete(pProgram->currentState.attachedShaders, shader, NULL);
499 CRGLSLProgram *pProgram = crStateGetProgramObj(program);
501 if (!pProgram)
507 g->glsl.activeProgram = pProgram;
518 CRGLSLProgram *pProgram = crStateGetProgramObj(program);
520 if (!pProgram)
526 if (g->glsl.activeProgram == pProgram)
536 CRGLSLProgram *pProgram = crStateGetProgramObj(program);
538 if (!pProgram)
544 pProgram->validated = GL_TRUE;
550 CRGLSLProgram *pProgram = (CRGLSLProgram *) data2;
573 crHashtableAdd(pProgram->activeState.attachedShaders, key, pShader);
578 CRGLSLProgram *pProgram = crStateGetProgramObj(program);
581 if (!pProgram)
587 pProgram->linked = GL_TRUE;
590 if (pProgram->activeState.attachedShaders)
592 crHashtableWalk(pProgram->activeState.attachedShaders, crStateFakeDecRefCountCB, NULL);
593 crFreeHashtable(pProgram->activeState.attachedShaders, crStateFreeGLSLShader);
594 pProgram->activeState.attachedShaders = NULL;
596 for (i=0; i<pProgram->activeState.cAttribs; ++i)
598 crFree(pProgram->activeState.pAttribs[i].name);
600 if (pProgram->activeState.pAttribs) crFree(pProgram->activeState.pAttribs);
603 crMemcpy(&pProgram->activeState, &pProgram->currentState, sizeof(CRGLSLProgramState));
605 pProgram->activeState.attachedShaders = crAllocHashtable();
606 if (!pProgram->activeState.attachedShaders)
611 crHashtableWalk(pProgram->currentState.attachedShaders, crStateCopyShaderCB, pProgram);
614 if (pProgram->activeState.pAttribs)
616 pProgram->activeState.pAttribs = (CRGLSLAttrib *) crAlloc(pProgram->activeState.cAttribs * sizeof(CRGLSLAttrib));
619 for (i=0; i<pProgram->activeState.cAttribs; ++i)
621 crMemcpy(&pProgram->activeState.pAttribs[i], &pProgram->currentState.pAttribs[i], sizeof(CRGLSLAttrib));
622 pProgram->activeState.pAttribs[i].name = crStrdup(pProgram->currentState.pAttribs[i].name);
626 crStateFreeProgramAttribsLocationCache(pProgram);
629 crStateFreeProgramUniforms(pProgram);
634 CRGLSLProgram *pProgram = crStateGetProgramObj(program);
638 if (!pProgram)
650 for (i=0; i<pProgram->currentState.cAttribs; ++i)
652 if (!crStrcmp(pProgram->currentState.pAttribs[i].name, name))
654 pProgram->currentState.pAttribs[i].index = index;
659 pAttribs = (CRGLSLAttrib*) crAlloc((pProgram->currentState.cAttribs+1)*sizeof(CRGLSLAttrib));
666 if (pProgram->currentState.cAttribs)
668 crMemcpy(&pAttribs[0], &pProgram->currentState.pAttribs[0], pProgram->currentState.cAttribs*sizeof(CRGLSLAttrib));
670 pAttribs[pProgram->currentState.cAttribs].index = index;
671 pAttribs[pProgram->currentState.cAttribs].name = crStrdup(name);
673 pProgram->currentState.cAttribs++;
674 if (pProgram->currentState.pAttribs) crFree(pProgram->currentState.pAttribs);
675 pProgram->currentState.pAttribs = pAttribs;
794 CRGLSLProgram *pProgram = crStateGetProgramObj(program);
796 if (!pProgram)
803 return pProgram->bUniformsSynced;
812 CRGLSLProgram *pProgram = crStateGetProgramObj(program);
814 if (!pProgram)
821 return pProgram->bAttribsSynced;
834 CRGLSLProgram *pProgram = crStateGetProgramObj(program);
839 if (!pProgram)
845 if (pProgram->bUniformsSynced)
848 crStateFreeProgramUniforms(pProgram);
857 pProgram->cUniforms = ((GLsizei*)pCurrent)[0];
861 //crDebug("crStateGLSLProgramCacheUniforms: %i active uniforms", pProgram->cUniforms);
863 if (pProgram->cUniforms)
865 pProgram->pUniforms = crAlloc(pProgram->cUniforms*sizeof(CRGLSLUniform));
866 if (!pProgram->pUniforms)
869 pProgram->cUniforms = 0;
874 for (i=0; i<pProgram->cUniforms; ++i)
882 pProgram->pUniforms[i].data = NULL;
883 pProgram->pUniforms[i].location = ((GLint*)pCurrent)[0];
895 pProgram->pUniforms[i].name = crStrndup(pCurrent, cbName);
898 //crDebug("crStateGLSLProgramCacheUniforms: uniform[%i]=%d, %s", i, pProgram->pUniforms[i].location, pProgram->pUniforms[i].name);
901 pProgram->bUniformsSynced = GL_TRUE;
910 CRGLSLProgram *pProgram = crStateGetProgramObj(program);
915 if (!pProgram)
921 if (pProgram->bAttribsSynced)
924 crStateFreeProgramAttribsLocationCache(pProgram);
933 pProgram->cAttribs = ((GLsizei*)pCurrent)[0];
937 crDebug("crStateGLSLProgramCacheAttribs: %i active attribs", pProgram->cAttribs);
939 if (pProgram->cAttribs)
941 pProgram->pAttribs = crAlloc(pProgram->cAttribs*sizeof(CRGLSLAttrib));
942 if (!pProgram->pAttribs)
945 pProgram->cAttribs = 0;
950 for (i=0; i<pProgram->cAttribs; ++i)
958 pProgram->pAttribs[i].index = ((GLint*)pCurrent)[0];
970 pProgram->pAttribs[i].name = crStrndup(pCurrent, cbName);
973 crDebug("crStateGLSLProgramCacheAttribs: attribs[%i]=%d, %s", i, pProgram->pAttribs[i].index, pProgram->pAttribs[i].name);
976 pProgram->bAttribsSynced = GL_TRUE;
1008 CRGLSLProgram *pProgram = crStateGetProgramObj(program);
1013 if (!pProgram)
1019 diff_api.GetProgramiv(pProgram->hwid, GL_ACTIVE_UNIFORM_MAX_LENGTH, &maxUniformLen);
1020 diff_api.GetProgramiv(pProgram->hwid, GL_ACTIVE_UNIFORMS, &activeUniforms);
1053 diff_api.GetActiveUniform(pProgram->hwid, i, maxUniformLen, &cbName, &size, &type, name);
1054 location = diff_api.GetUniformLocation(pProgram->hwid, name);
1091 location = diff_api.GetUniformLocation(pProgram->hwid, name);
1139 CRGLSLProgram *pProgram = crStateGetProgramObj(program);
1144 if (!pProgram)
1150 diff_api.GetProgramiv(pProgram->hwid, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, &maxAttribLen);
1151 diff_api.GetProgramiv(pProgram->hwid, GL_ACTIVE_ATTRIBUTES, &activeAttribs);
1184 diff_api.GetActiveAttrib(pProgram->hwid, i, maxAttribLen, &cbName, &size, &type, name);
1185 location = diff_api.GetAttribLocation(pProgram->hwid, name);
1222 location = diff_api.GetAttribLocation(pProgram->hwid, name);
1248 CRGLSLProgram *pProgram = crStateGetProgramObj(program);
1252 if (!pProgram)
1258 if (!pProgram->bUniformsSynced)
1264 for (i=0; i<pProgram->cUniforms; ++i)
1266 if (!crStrcmp(name, pProgram->pUniforms[i].name))
1268 result = pProgram->pUniforms[i].location;
1283 CRGLSLProgram *pProgram = crStateGetProgramObj(program);
1287 if (!pProgram)
1293 if (!pProgram->bAttribsSynced)
1299 for (i=0; i<pProgram->cAttribs; ++i)
1301 if (!crStrcmp(name, pProgram->pAttribs[i].name))
1303 result = pProgram->pAttribs[i].index;
1357 CRGLSLProgram *pProgram = (CRGLSLProgram *) data2;
1367 diff_api.AttachShader(pProgram->hwid, pShader->hwid);
1373 CRGLSLProgram *pProgram = (CRGLSLProgram *) data2;
1376 diff_api.DetachShader(pProgram->hwid, pShader->hwid);
1381 CRGLSLProgram *pProgram = (CRGLSLProgram*) data1;
1385 pProgram->hwid = diff_api.CreateProgram();
1387 if (pProgram->linked)
1389 CRASSERT(pProgram->activeState.attachedShaders);
1391 crHashtableWalk(pProgram->activeState.attachedShaders, crStateFixAttachedShaderHWIDsCB, ctx);
1392 crHashtableWalk(pProgram->activeState.attachedShaders, crStateAttachShaderCB, pProgram);
1394 for (i=0; i<pProgram->activeState.cAttribs; ++i)
1396 diff_api.BindAttribLocation(pProgram->hwid, pProgram->activeState.pAttribs[i].index, pProgram->activeState.pAttribs[i].name);
1399 if (pProgram->validated)
1400 diff_api.ValidateProgram(pProgram->hwid);
1402 diff_api.LinkProgram(pProgram->hwid);
1405 diff_api.UseProgram(pProgram->hwid);
1407 for (i=0; i<pProgram->cUniforms; ++i)
1410 GLfloat *pFdata = (GLfloat*)pProgram->pUniforms[i].data;
1411 GLint *pIdata = (GLint*)pProgram->pUniforms[i].data;
1413 location = diff_api.GetUniformLocation(pProgram->hwid, pProgram->pUniforms[i].name);
1414 switch (pProgram->pUniforms[i].type)
1484 crWarning("crStateGLSLCreateProgramCB: unknown uniform type 0x%x", (GLint)pProgram->pUniforms[i].type);
1487 crFree(pProgram->pUniforms[i].data);
1488 crFree(pProgram->pUniforms[i].name);
1489 } /*for (i=0; i<pProgram->cUniforms; ++i)*/
1490 if (pProgram->pUniforms) crFree(pProgram->pUniforms);
1491 pProgram->pUniforms = NULL;
1492 pProgram->cUniforms = 0;
1494 crHashtableWalk(pProgram->activeState.attachedShaders, crStateDetachShaderCB, pProgram);
1495 crHashtableWalk(pProgram->currentState.attachedShaders, crStateAttachShaderCB, pProgram);