mirror of
https://gitlab.com/shinovon/re3-symbian.git
synced 2026-05-23 01:57:21 +03:00
Symbian^3 port
This commit is contained in:
parent
77cdaaf97e
commit
3eb71f2cc5
106 changed files with 2098 additions and 745 deletions
71
vendor/librw/src/gl/gl3skin.cpp
vendored
71
vendor/librw/src/gl/gl3skin.cpp
vendored
|
|
@ -25,7 +25,7 @@ namespace gl3 {
|
|||
#ifdef RW_OPENGL
|
||||
|
||||
static Shader *skinShader, *skinShader_noAT;
|
||||
static Shader *skinShader_fullLight, *skinShader_fullLight_noAT;
|
||||
//static Shader *skinShader_fullLight, *skinShader_fullLight_noAT;
|
||||
static int32 u_boneMatrices;
|
||||
|
||||
void
|
||||
|
|
@ -189,17 +189,9 @@ skinInstanceCB(Geometry *geo, InstanceDataHeader *header, bool32 reinstance)
|
|||
header->totalNumVertex, a->stride);
|
||||
}
|
||||
|
||||
#ifdef RW_GL_USE_VAOS
|
||||
glBindVertexArray(header->vao);
|
||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, header->ibo);
|
||||
#endif
|
||||
glBindBuffer(GL_ARRAY_BUFFER, header->vbo);
|
||||
glBufferData(GL_ARRAY_BUFFER, header->totalNumVertex*attribs[0].stride,
|
||||
header->vertexBuffer, GL_STATIC_DRAW);
|
||||
#ifdef RW_GL_USE_VAOS
|
||||
setAttribPointers(header->attribDesc, header->numAttribs);
|
||||
glBindVertexArray(0);
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -208,7 +200,8 @@ skinUninstanceCB(Geometry *geo, InstanceDataHeader *header)
|
|||
assert(0 && "can't uninstance");
|
||||
}
|
||||
|
||||
static float skinMatrices[64*16];
|
||||
#define MAX_BONES 24
|
||||
static float skinMatrices[MAX_BONES*16];
|
||||
|
||||
void
|
||||
uploadSkinMatrices(Atomic *a)
|
||||
|
|
@ -218,13 +211,18 @@ uploadSkinMatrices(Atomic *a)
|
|||
Matrix *m = (Matrix*)skinMatrices;
|
||||
HAnimHierarchy *hier = Skin::getHierarchy(a);
|
||||
|
||||
int numBones = skin->numBones;
|
||||
if (numBones > MAX_BONES) numBones = MAX_BONES;
|
||||
|
||||
if(hier){
|
||||
Matrix *invMats = (Matrix*)skin->inverseMatrices;
|
||||
Matrix tmp;
|
||||
|
||||
int numNodes = hier->numNodes;
|
||||
if (numNodes > MAX_BONES) numNodes = MAX_BONES;
|
||||
|
||||
assert(skin->numBones == hier->numNodes);
|
||||
if(hier->flags & HAnimHierarchy::LOCALSPACEMATRICES){
|
||||
for(i = 0; i < hier->numNodes; i++){
|
||||
for(i = 0; i < numNodes; i++){
|
||||
invMats[i].flags = 0;
|
||||
Matrix::mult(m, &invMats[i], &hier->matrices[i]);
|
||||
m++;
|
||||
|
|
@ -232,7 +230,7 @@ uploadSkinMatrices(Atomic *a)
|
|||
}else{
|
||||
Matrix invAtmMat;
|
||||
Matrix::invert(&invAtmMat, a->getFrame()->getLTM());
|
||||
for(i = 0; i < hier->numNodes; i++){
|
||||
for(i = 0; i < numNodes; i++){
|
||||
invMats[i].flags = 0;
|
||||
Matrix::mult(&tmp, &hier->matrices[i], &invAtmMat);
|
||||
Matrix::mult(m, &invMats[i], &tmp);
|
||||
|
|
@ -240,7 +238,7 @@ uploadSkinMatrices(Atomic *a)
|
|||
}
|
||||
}
|
||||
}else{
|
||||
for(i = 0; i < skin->numBones; i++){
|
||||
for(i = 0; i < numBones; i++){
|
||||
m->setIdentity();
|
||||
m++;
|
||||
}
|
||||
|
|
@ -273,18 +271,20 @@ skinRenderCB(Atomic *atomic, InstanceDataHeader *header)
|
|||
|
||||
rw::SetRenderState(VERTEXALPHA, inst->vertexAlpha || m->color.alpha != 0xFF);
|
||||
|
||||
if((vsBits & VSLIGHT_MASK) == 0){
|
||||
// if((vsBits & VSLIGHT_MASK) == 0){
|
||||
if(getAlphaTest())
|
||||
skinShader->use();
|
||||
else
|
||||
skinShader_noAT->use();
|
||||
}else{
|
||||
if(getAlphaTest())
|
||||
skinShader_fullLight->use();
|
||||
else
|
||||
skinShader_fullLight_noAT->use();
|
||||
}
|
||||
// }else{
|
||||
// if(getAlphaTest())
|
||||
// skinShader_fullLight->use();
|
||||
// else
|
||||
// skinShader_fullLight_noAT->use();
|
||||
// }
|
||||
|
||||
// defaultShader->use();
|
||||
|
||||
drawInst(header, inst);
|
||||
inst++;
|
||||
}
|
||||
|
|
@ -295,7 +295,7 @@ static void*
|
|||
skinOpen(void *o, int32, int32)
|
||||
{
|
||||
skinGlobals.pipelines[PLATFORM_GL3] = makeSkinPipeline();
|
||||
|
||||
|
||||
#include "shaders/simple_fs_gl.inc"
|
||||
#include "shaders/skin_gl.inc"
|
||||
const char *vs[] = { shaderDecl, header_vert_src, skin_vert_src, nil };
|
||||
|
|
@ -307,11 +307,11 @@ skinOpen(void *o, int32, int32)
|
|||
assert(skinShader);
|
||||
skinShader_noAT = Shader::create(vs, fs_noAT);
|
||||
assert(skinShader_noAT);
|
||||
|
||||
skinShader_fullLight = Shader::create(vs_fullLight, fs);
|
||||
assert(skinShader_fullLight);
|
||||
skinShader_fullLight_noAT = Shader::create(vs_fullLight, fs_noAT);
|
||||
assert(skinShader_fullLight_noAT);
|
||||
//
|
||||
// skinShader_fullLight = Shader::create(vs_fullLight, fs);
|
||||
// assert(skinShader_fullLight);
|
||||
// skinShader_fullLight_noAT = Shader::create(vs_fullLight, fs_noAT);
|
||||
// assert(skinShader_fullLight_noAT);
|
||||
|
||||
return o;
|
||||
}
|
||||
|
|
@ -326,10 +326,10 @@ skinClose(void *o, int32, int32)
|
|||
skinShader = nil;
|
||||
skinShader_noAT->destroy();
|
||||
skinShader_noAT = nil;
|
||||
skinShader_fullLight->destroy();
|
||||
skinShader_fullLight = nil;
|
||||
skinShader_fullLight_noAT->destroy();
|
||||
skinShader_fullLight_noAT = nil;
|
||||
// skinShader_fullLight->destroy();
|
||||
// skinShader_fullLight = nil;
|
||||
// skinShader_fullLight_noAT->destroy();
|
||||
// skinShader_fullLight_noAT = nil;
|
||||
|
||||
return o;
|
||||
}
|
||||
|
|
@ -337,10 +337,11 @@ skinClose(void *o, int32, int32)
|
|||
void
|
||||
initSkin(void)
|
||||
{
|
||||
u_boneMatrices = registerUniform("u_boneMatrices", UNIFORM_MAT4, 64);
|
||||
|
||||
Driver::registerPlugin(PLATFORM_GL3, 0, ID_SKIN,
|
||||
skinOpen, skinClose);
|
||||
// TODO
|
||||
// u_boneMatrices = registerUniform("u_boneMatrices", UNIFORM_MAT4, MAX_BONES);
|
||||
//
|
||||
// Driver::registerPlugin(PLATFORM_GL3, 0, ID_SKIN,
|
||||
// skinOpen, skinClose);
|
||||
}
|
||||
|
||||
ObjPipeline*
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue