Loading libs/rs/rsProgramVertex.cpp +6 −0 Original line number Diff line number Diff line Loading @@ -318,6 +318,12 @@ void ProgramVertex::setTextureMatrix(const rsc_Matrix *m) const mDirty = true; } void ProgramVertex::getProjectionMatrix(rsc_Matrix *m) const { float *f = static_cast<float *>(mConstants[0]->getPtr()); memcpy(m, &f[RS_PROGRAM_VERTEX_PROJECTION_OFFSET], sizeof(rsc_Matrix)); } void ProgramVertex::transformToScreen(const Context *rsc, float *v4out, const float *v3in) const { float *f = static_cast<float *>(mConstants[0]->getPtr()); Loading libs/rs/rsProgramVertex.h +1 −0 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ public: void addLight(const Light *); void setProjectionMatrix(const rsc_Matrix *) const; void getProjectionMatrix(rsc_Matrix *) const; void setModelviewMatrix(const rsc_Matrix *) const; void setTextureMatrix(const rsc_Matrix *) const; Loading libs/rs/rsScriptC_LibGL.cpp +8 −0 Original line number Diff line number Diff line Loading @@ -117,6 +117,12 @@ static void SC_pfConstantColor(RsProgramFragment vpf, float r, float g, float b, pf->setConstantColor(r, g, b, a); } static void SC_vpGetProjectionMatrix(rsc_Matrix *m) { GET_TLS(); rsc->getVertex()->getProjectionMatrix(m); } ////////////////////////////////////////////////////////////////////////////// // Drawing Loading Loading @@ -387,6 +393,8 @@ static ScriptCState::SymbolTable_t gSyms[] = { { "_Z31rsgProgramVertexLoadModelMatrixPK12rs_matrix4x4", (void *)&SC_vpLoadModelMatrix }, { "_Z33rsgProgramVertexLoadTextureMatrixPK12rs_matrix4x4", (void *)&SC_vpLoadTextureMatrix }, { "_Z35rsgProgramVertexGetProjectionMatrixP12rs_matrix4x4", (void *)&SC_vpGetProjectionMatrix }, { "_Z31rsgProgramFragmentConstantColor19rs_program_fragmentffff", (void *)&SC_pfConstantColor }, { "_Z11rsgGetWidthv", (void *)&SC_getWidth }, Loading libs/rs/scriptc/rs_core.rsh +86 −0 Original line number Diff line number Diff line Loading @@ -767,6 +767,92 @@ static void rsQuaternionGetMatrixUnit(rs_matrix4x4 *m, const rs_quaternion *q) { m->m[15] = 1.0f; } ///////////////////////////////////////////////////// // utility funcs ///////////////////////////////////////////////////// void __attribute__((overloadable)) rsExtractFrustumPlanes(const rs_matrix4x4 *modelViewProj, float4 *left, float4 *right, float4 *top, float4 *bottom, float4 *near, float4 *far) { // x y z w = a b c d in the plane equation left->x = modelViewProj->m[3] + modelViewProj->m[0]; left->y = modelViewProj->m[7] + modelViewProj->m[4]; left->z = modelViewProj->m[11] + modelViewProj->m[8]; left->w = modelViewProj->m[15] + modelViewProj->m[12]; right->x = modelViewProj->m[3] - modelViewProj->m[0]; right->y = modelViewProj->m[7] - modelViewProj->m[4]; right->z = modelViewProj->m[11] - modelViewProj->m[8]; right->w = modelViewProj->m[15] - modelViewProj->m[12]; top->x = modelViewProj->m[3] - modelViewProj->m[1]; top->y = modelViewProj->m[7] - modelViewProj->m[5]; top->z = modelViewProj->m[11] - modelViewProj->m[9]; top->w = modelViewProj->m[15] - modelViewProj->m[13]; bottom->x = modelViewProj->m[3] + modelViewProj->m[1]; bottom->y = modelViewProj->m[7] + modelViewProj->m[5]; bottom->z = modelViewProj->m[11] + modelViewProj->m[9]; bottom->w = modelViewProj->m[15] + modelViewProj->m[13]; near->x = modelViewProj->m[3] + modelViewProj->m[2]; near->y = modelViewProj->m[7] + modelViewProj->m[6]; near->z = modelViewProj->m[11] + modelViewProj->m[10]; near->w = modelViewProj->m[15] + modelViewProj->m[14]; far->x = modelViewProj->m[3] - modelViewProj->m[2]; far->y = modelViewProj->m[7] - modelViewProj->m[6]; far->z = modelViewProj->m[11] - modelViewProj->m[10]; far->w = modelViewProj->m[15] - modelViewProj->m[14]; float len = length(left->xyz); *left /= len; len = length(right->xyz); *right /= len; len = length(top->xyz); *top /= len; len = length(bottom->xyz); *bottom /= len; len = length(near->xyz); *near /= len; len = length(far->xyz); *far /= len; } bool __attribute__((overloadable)) rsIsSphereInFrustum(float4 *sphere, float4 *left, float4 *right, float4 *top, float4 *bottom, float4 *near, float4 *far) { float distToCenter = dot(left->xyz, sphere->xyz) + left->w; if(distToCenter < -sphere->w) { return false; } distToCenter = dot(right->xyz, sphere->xyz) + right->w; if(distToCenter < -sphere->w) { return false; } distToCenter = dot(top->xyz, sphere->xyz) + top->w; if(distToCenter < -sphere->w) { return false; } distToCenter = dot(bottom->xyz, sphere->xyz) + bottom->w; if(distToCenter < -sphere->w) { return false; } distToCenter = dot(near->xyz, sphere->xyz) + near->w; if(distToCenter < -sphere->w) { return false; } distToCenter = dot(far->xyz, sphere->xyz) + far->w; if(distToCenter < -sphere->w) { return false; } return true; } ///////////////////////////////////////////////////// // int ops Loading libs/rs/scriptc/rs_graphics.rsh +3 −2 Original line number Diff line number Diff line Loading @@ -26,6 +26,9 @@ extern void __attribute__((overloadable)) extern void __attribute__((overloadable)) rsgProgramVertexLoadTextureMatrix(const rs_matrix4x4 *); extern void __attribute__((overloadable)) rsgProgramVertexGetProjectionMatrix(rs_matrix4x4 *); extern void __attribute__((overloadable)) rsgProgramFragmentConstantColor(rs_program_fragment, float, float, float, float); Loading Loading @@ -92,8 +95,6 @@ rsgMeshComputeBoundingBox(rs_mesh mesh, float3 *bBoxMin, float3 *bBoxMax) { bBoxMax->z = z2; } /////////////////////////////////////////////////////// // misc Loading Loading
libs/rs/rsProgramVertex.cpp +6 −0 Original line number Diff line number Diff line Loading @@ -318,6 +318,12 @@ void ProgramVertex::setTextureMatrix(const rsc_Matrix *m) const mDirty = true; } void ProgramVertex::getProjectionMatrix(rsc_Matrix *m) const { float *f = static_cast<float *>(mConstants[0]->getPtr()); memcpy(m, &f[RS_PROGRAM_VERTEX_PROJECTION_OFFSET], sizeof(rsc_Matrix)); } void ProgramVertex::transformToScreen(const Context *rsc, float *v4out, const float *v3in) const { float *f = static_cast<float *>(mConstants[0]->getPtr()); Loading
libs/rs/rsProgramVertex.h +1 −0 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ public: void addLight(const Light *); void setProjectionMatrix(const rsc_Matrix *) const; void getProjectionMatrix(rsc_Matrix *) const; void setModelviewMatrix(const rsc_Matrix *) const; void setTextureMatrix(const rsc_Matrix *) const; Loading
libs/rs/rsScriptC_LibGL.cpp +8 −0 Original line number Diff line number Diff line Loading @@ -117,6 +117,12 @@ static void SC_pfConstantColor(RsProgramFragment vpf, float r, float g, float b, pf->setConstantColor(r, g, b, a); } static void SC_vpGetProjectionMatrix(rsc_Matrix *m) { GET_TLS(); rsc->getVertex()->getProjectionMatrix(m); } ////////////////////////////////////////////////////////////////////////////// // Drawing Loading Loading @@ -387,6 +393,8 @@ static ScriptCState::SymbolTable_t gSyms[] = { { "_Z31rsgProgramVertexLoadModelMatrixPK12rs_matrix4x4", (void *)&SC_vpLoadModelMatrix }, { "_Z33rsgProgramVertexLoadTextureMatrixPK12rs_matrix4x4", (void *)&SC_vpLoadTextureMatrix }, { "_Z35rsgProgramVertexGetProjectionMatrixP12rs_matrix4x4", (void *)&SC_vpGetProjectionMatrix }, { "_Z31rsgProgramFragmentConstantColor19rs_program_fragmentffff", (void *)&SC_pfConstantColor }, { "_Z11rsgGetWidthv", (void *)&SC_getWidth }, Loading
libs/rs/scriptc/rs_core.rsh +86 −0 Original line number Diff line number Diff line Loading @@ -767,6 +767,92 @@ static void rsQuaternionGetMatrixUnit(rs_matrix4x4 *m, const rs_quaternion *q) { m->m[15] = 1.0f; } ///////////////////////////////////////////////////// // utility funcs ///////////////////////////////////////////////////// void __attribute__((overloadable)) rsExtractFrustumPlanes(const rs_matrix4x4 *modelViewProj, float4 *left, float4 *right, float4 *top, float4 *bottom, float4 *near, float4 *far) { // x y z w = a b c d in the plane equation left->x = modelViewProj->m[3] + modelViewProj->m[0]; left->y = modelViewProj->m[7] + modelViewProj->m[4]; left->z = modelViewProj->m[11] + modelViewProj->m[8]; left->w = modelViewProj->m[15] + modelViewProj->m[12]; right->x = modelViewProj->m[3] - modelViewProj->m[0]; right->y = modelViewProj->m[7] - modelViewProj->m[4]; right->z = modelViewProj->m[11] - modelViewProj->m[8]; right->w = modelViewProj->m[15] - modelViewProj->m[12]; top->x = modelViewProj->m[3] - modelViewProj->m[1]; top->y = modelViewProj->m[7] - modelViewProj->m[5]; top->z = modelViewProj->m[11] - modelViewProj->m[9]; top->w = modelViewProj->m[15] - modelViewProj->m[13]; bottom->x = modelViewProj->m[3] + modelViewProj->m[1]; bottom->y = modelViewProj->m[7] + modelViewProj->m[5]; bottom->z = modelViewProj->m[11] + modelViewProj->m[9]; bottom->w = modelViewProj->m[15] + modelViewProj->m[13]; near->x = modelViewProj->m[3] + modelViewProj->m[2]; near->y = modelViewProj->m[7] + modelViewProj->m[6]; near->z = modelViewProj->m[11] + modelViewProj->m[10]; near->w = modelViewProj->m[15] + modelViewProj->m[14]; far->x = modelViewProj->m[3] - modelViewProj->m[2]; far->y = modelViewProj->m[7] - modelViewProj->m[6]; far->z = modelViewProj->m[11] - modelViewProj->m[10]; far->w = modelViewProj->m[15] - modelViewProj->m[14]; float len = length(left->xyz); *left /= len; len = length(right->xyz); *right /= len; len = length(top->xyz); *top /= len; len = length(bottom->xyz); *bottom /= len; len = length(near->xyz); *near /= len; len = length(far->xyz); *far /= len; } bool __attribute__((overloadable)) rsIsSphereInFrustum(float4 *sphere, float4 *left, float4 *right, float4 *top, float4 *bottom, float4 *near, float4 *far) { float distToCenter = dot(left->xyz, sphere->xyz) + left->w; if(distToCenter < -sphere->w) { return false; } distToCenter = dot(right->xyz, sphere->xyz) + right->w; if(distToCenter < -sphere->w) { return false; } distToCenter = dot(top->xyz, sphere->xyz) + top->w; if(distToCenter < -sphere->w) { return false; } distToCenter = dot(bottom->xyz, sphere->xyz) + bottom->w; if(distToCenter < -sphere->w) { return false; } distToCenter = dot(near->xyz, sphere->xyz) + near->w; if(distToCenter < -sphere->w) { return false; } distToCenter = dot(far->xyz, sphere->xyz) + far->w; if(distToCenter < -sphere->w) { return false; } return true; } ///////////////////////////////////////////////////// // int ops Loading
libs/rs/scriptc/rs_graphics.rsh +3 −2 Original line number Diff line number Diff line Loading @@ -26,6 +26,9 @@ extern void __attribute__((overloadable)) extern void __attribute__((overloadable)) rsgProgramVertexLoadTextureMatrix(const rs_matrix4x4 *); extern void __attribute__((overloadable)) rsgProgramVertexGetProjectionMatrix(rs_matrix4x4 *); extern void __attribute__((overloadable)) rsgProgramFragmentConstantColor(rs_program_fragment, float, float, float, float); Loading Loading @@ -92,8 +95,6 @@ rsgMeshComputeBoundingBox(rs_mesh mesh, float3 *bBoxMin, float3 *bBoxMax) { bBoxMax->z = z2; } /////////////////////////////////////////////////////// // misc Loading