/* \brief set shader for render pass */ GLHCKAPI void glhckRenderPassShader(glhckShader *shader) { GLHCK_INITIALIZED(); CALL(2, "%p", shader); if (GLHCKRP()->shader) glhckShaderFree(GLHCKRP()->shader); if (shader) GLHCKRP()->shader = glhckShaderRef(shader); else GLHCKRP()->shader = NULL; }
/* \brief set clear color to render */ GLHCKAPI void glhckRenderClearColor(const glhckColorb *color) { GLHCK_INITIALIZED(); CALL(2, "%p", color); if (!_glhckRenderInitialized()) return; GLHCKRA()->clearColor(color); memcpy(&GLHCKRP()->clearColor, color, sizeof(glhckColorb)); }
/* \brief set renderer's viewport */ GLHCKAPI void glhckRenderViewport(const glhckRect *viewport) { kmMat4 ortho; GLHCK_INITIALIZED(); CALL(1, RECTS, RECT(viewport)); assert(viewport->x >= 0 && viewport->y >= 0 && viewport->w > 0 && viewport->h > 0); if (!_glhckRenderInitialized()) return; /* set viewport on render */ GLHCKRA()->viewport(viewport->x, viewport->y, viewport->w, viewport->h); memcpy(&GLHCKRP()->viewport, viewport, sizeof(glhckRect)); /* update orthographic matrix */ kmMat4OrthographicProjection(&ortho, viewport->x, viewport->w, viewport->h, viewport->y, -1.0f, 1.0f); GLHCKRA()->setOrthographic(&ortho); memcpy(&GLHCKRD()->view.orthographic, &ortho, sizeof(kmMat4)); }
/* \brief set needed state from pass data */ static void rPassState(void) { /* front face */ GLPOINTER()->state.frontFace = GLHCKRP()->frontFace; /* cull face */ GLPOINTER()->state.cullFace = GLHCKRP()->cullFace; /* disabled pass bits override the above. * it means that we don't want something for this render pass. */ if (!(GLHCKRP()->flags & GLHCK_PASS_DEPTH)) GLPOINTER()->state.flags &= ~GL_STATE_DEPTH; if (!(GLHCKRP()->flags & GLHCK_PASS_CULL)) GLPOINTER()->state.flags &= ~GL_STATE_CULL; if (!(GLHCKRP()->flags & GLHCK_PASS_BLEND)) GLPOINTER()->state.flags &= ~GL_STATE_BLEND; if (!(GLHCKRP()->flags & GLHCK_PASS_TEXTURE)) GLPOINTER()->state.flags &= ~GL_STATE_TEXTURE; if (!(GLHCKRP()->flags & GLHCK_PASS_DRAW_OBB)) GLPOINTER()->state.flags &= ~GL_STATE_DRAW_OBB; if (!(GLHCKRP()->flags & GLHCK_PASS_DRAW_AABB)) GLPOINTER()->state.flags &= ~GL_STATE_DRAW_AABB; if (!(GLHCKRP()->flags & GLHCK_PASS_DRAW_SKELETON)) GLPOINTER()->state.flags &= ~GL_STATE_DRAW_SKELETON; if (!(GLHCKRP()->flags & GLHCK_PASS_DRAW_WIREFRAME)) GLPOINTER()->state.flags &= ~GL_STATE_DRAW_WIREFRAME; if (!(GLHCKRP()->flags & GLHCK_PASS_LIGHTING)) GLPOINTER()->state.flags &= ~GL_STATE_LIGHTING; /* pass blend override */ if (GLHCKRP()->blenda != GLHCK_ZERO || GLHCKRP()->blendb != GLHCK_ZERO) { GLPOINTER()->state.flags |= GL_STATE_BLEND; GLPOINTER()->state.blenda = GLHCKRP()->blenda; GLPOINTER()->state.blendb = GLHCKRP()->blendb; } /* overdraw state */ if (!(GLHCKRP()->flags & GLHCK_PASS_OVERDRAW)) { GLPOINTER()->state.flags &= ~GL_STATE_OVERDRAW; } else { GLPOINTER()->state.flags &= ~GL_STATE_TEXTURE; GLPOINTER()->state.flags &= ~GL_STATE_LIGHTING; GLPOINTER()->state.flags |= GL_STATE_OVERDRAW; GLPOINTER()->state.flags |= GL_STATE_BLEND; GLPOINTER()->state.blenda = GLHCK_ONE; GLPOINTER()->state.blendb = GLHCK_ONE; } GLPOINTER()->state.attrib[GLHCK_ATTRIB_TEXTURE] = (GLPOINTER()->state.flags & GL_STATE_TEXTURE); }
/* \brief set render pass cull face side */ GLHCKAPI void glhckRenderCullFace(glhckCullFaceType face) { GLHCK_INITIALIZED(); CALL(2, "%d", face); GLHCKRP()->cullFace = face; }
/* \brief set render pass front face orientation */ GLHCKAPI void glhckRenderFrontFace(glhckFaceOrientation orientation) { GLHCK_INITIALIZED(); CALL(2, "%d", orientation); GLHCKRP()->frontFace = orientation; }
/* \brief set render pass flags */ GLHCKAPI void glhckRenderPass(unsigned int flags) { GLHCK_INITIALIZED(); CALL(2, "%u", flags); GLHCKRP()->flags = flags; }