mirror of
https://github.com/Almamu/linux-wallpaperengine.git
synced 2025-07-13 21:02:34 +08:00
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:
parent
da6dca0473
commit
157966a528
104
docs/rendering/MDL_FILES.md
Normal file
104
docs/rendering/MDL_FILES.md
Normal 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
|
||||
```
|
@ -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 ();
|
||||
|
Loading…
Reference in New Issue
Block a user