Move glClear to the common point before the actual render of an image

Added work in progress reverse engineering of MDL files

Signed-off-by: Alexis Maiquez <almamu@almamu.com>
This commit is contained in:
Alexis Maiquez 2022-10-31 07:05:22 +01:00
parent da6dca0473
commit 157966a528
2 changed files with 109 additions and 10 deletions

104
docs/rendering/MDL_FILES.md Normal file
View File

@ -0,0 +1,104 @@
# MDL Files
These seem to be simple model files containing the required information to render 3D objects.
They're also used in some 2D backgrounds (like 2879436369) for bones.
**NOTE**: This documentation page is not completed yet as there's still work left to do on the reverse engineering of this file format. For now just a structure, describing the file format is here
```
//
// 010 editor template
//
//
typedef struct {
float x <fgcolor=cRed>;
float y <fgcolor=cGreen>;
float z <fgcolor=cBlue>;
} VECTOR3;
typedef struct {
float x <fgcolor=cRed>;
float y <fgcolor=cGreen>;
float z <fgcolor=cBlue>;
float w <fgcolor=cPurple>;
} VECTOR4;
typedef struct {
float x <fgcolor=cRed>;
float y <fgcolor=cGreen>;
} VECTOR2;
typedef struct {
DWORD x <fgcolor=cRed>;
DWORD y <fgcolor=cGreen>;
DWORD z <fgcolor=cBlue>;
DWORD w <fgcolor=cPurple>;
} BLENDINDICES;
typedef struct {
VECTOR3 vertex <bgcolor=cRed>;
BLENDINDICES blendindices;
VECTOR4 blendweight;
VECTOR2 uv <bgcolor=cBlue>;
} VERTEX;
typedef struct {
WORD x;
WORD y;
WORD z;
} VERTEXINDICE;
typedef struct {
CHAR header[];
DWORD first;
DWORD second;
DWORD third;
CHAR json[];
DWORD fourth;
DWORD fifth;
DWORD vertexByteLength;
VERTEX vertices[vertexByteLength / sizeof(VERTEX)];
DWORD indicesByteLength;
VERTEXINDICE indices[indicesByteLength / sizeof (VERTEXINDICE)] <bgcolor=cYellow>;
} MDLVHEADER;
typedef struct {
BYTE tmp;
DWORD type;
DWORD unk1;
} BONEENTRYHEADER;
typedef struct {
BONEENTRYHEADER header;
DWORD entryByteLength;
float v[entryByteLength / sizeof (float)];
CHAR info[];
} BONEENTRY;
typedef struct {
BONEENTRYHEADER header;
} BONE2ENTRY;
typedef struct {
CHAR header[];
DWORD mightBeByteLength;
DWORD numberOfBones;
BONEENTRY bones[numberOfBones]<optimize=false>;
BONE2ENTRY unk[numberOfBones]<optimize=false>;
} MDLSHEADER;
typedef struct {
CHAR header[];
} MDLAHEADER;
typedef struct {
MDLVHEADER mdlv;
MDLSHEADER mdls;
} MDLFILE;
LittleEndian ();
MDLFILE file;
// mdlv => vertices information
// mdls => skinning information
// mdla => animation information
```

View File

@ -269,11 +269,6 @@ void CImage::simpleRender ()
{
ITexture* input = this->m_mainFBO;
// clear the main framebuffer
glBindFramebuffer (GL_FRAMEBUFFER, this->m_mainFBO->getFramebuffer ());
// attach the main texture
glClear (GL_COLOR_BUFFER_BIT);
// FIXME: THIS IS A QUICK HACK FOR ANIMATED IMAGES, IF ANY OF THOSE HAVE ANY EFFECT ON THEM THIS WILL LIKELY BREAK
if (this->getTexture ()->isAnimated () == true)
{
@ -303,11 +298,6 @@ void CImage::complexRender ()
CFBO* drawTo = this->m_mainFBO;
ITexture* asInput = this->getTexture ();
// clear the main framebuffer
glBindFramebuffer (GL_FRAMEBUFFER, this->m_mainFBO->getFramebuffer ());
// attach the main texture
glClear (GL_COLOR_BUFFER_BIT);
// do the first pass render into the main framebuffer
auto cur = this->m_copyMaterial->getPasses ().begin ();
auto end = this->m_copyMaterial->getPasses ().end ();
@ -389,6 +379,11 @@ void CImage::render ()
glColorMask (true, true, true, true);
// clear the main framebuffer
glBindFramebuffer (GL_FRAMEBUFFER, this->m_mainFBO->getFramebuffer ());
// attach the main texture
glClear (GL_COLOR_BUFFER_BIT);
// check if there's more than one pass and do different things based on that
if (this->m_effects.empty () == true)
this->simpleRender ();