- First version of the matrix handling
- First version of the 3D core plug-in system
This commit is contained in:
parent
b65c7e33a8
commit
1418830a2b
|
@ -0,0 +1,246 @@
|
||||||
|
/*
|
||||||
|
Copyright (C) 2006-2007 shash
|
||||||
|
|
||||||
|
This file is part of DeSmuME
|
||||||
|
|
||||||
|
DeSmuME is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
DeSmuME is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with DeSmuME; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include "matrix.h"
|
||||||
|
|
||||||
|
void MatrixInit (float *matrix)
|
||||||
|
{
|
||||||
|
memset (matrix, 0, sizeof(float)*16);
|
||||||
|
|
||||||
|
matrix[0] = matrix[5] = matrix[10] = matrix[15] = 1.f;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MatrixMultVec (float *matrix, float *vecPtr)
|
||||||
|
{
|
||||||
|
float x = vecPtr[0];
|
||||||
|
float y = vecPtr[1];
|
||||||
|
float z = vecPtr[2];
|
||||||
|
|
||||||
|
vecPtr[0] = x * matrix[0] + y * matrix[4] + z * matrix[ 8] + matrix[12];
|
||||||
|
vecPtr[1] = x * matrix[1] + y * matrix[5] + z * matrix[ 9] + matrix[13];
|
||||||
|
vecPtr[2] = x * matrix[2] + y * matrix[6] + z * matrix[10] + matrix[14];
|
||||||
|
}
|
||||||
|
|
||||||
|
void MatrixIdentity (float *matrix)
|
||||||
|
{
|
||||||
|
memset (matrix, 0, sizeof(float)*16);
|
||||||
|
|
||||||
|
matrix[0] = matrix[5] = matrix[10] = matrix[15] = 1.f;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MatrixMultiply (float *matrix, float *rightMatrix)
|
||||||
|
{
|
||||||
|
float tmpMatrix[16];
|
||||||
|
|
||||||
|
tmpMatrix[0] = (matrix[0]*rightMatrix[0])+(matrix[4]*rightMatrix[1])+(matrix[8]*rightMatrix[2])+(matrix[12]*rightMatrix[3]);
|
||||||
|
tmpMatrix[1] = (matrix[1]*rightMatrix[0])+(matrix[5]*rightMatrix[1])+(matrix[9]*rightMatrix[2])+(matrix[13]*rightMatrix[3]);
|
||||||
|
tmpMatrix[2] = (matrix[2]*rightMatrix[0])+(matrix[6]*rightMatrix[1])+(matrix[10]*rightMatrix[2])+(matrix[14]*rightMatrix[3]);
|
||||||
|
tmpMatrix[3] = (matrix[3]*rightMatrix[0])+(matrix[7]*rightMatrix[1])+(matrix[11]*rightMatrix[2])+(matrix[15]*rightMatrix[3]);
|
||||||
|
|
||||||
|
tmpMatrix[4] = (matrix[0]*rightMatrix[4])+(matrix[4]*rightMatrix[5])+(matrix[8]*rightMatrix[6])+(matrix[12]*rightMatrix[7]);
|
||||||
|
tmpMatrix[5] = (matrix[1]*rightMatrix[4])+(matrix[5]*rightMatrix[5])+(matrix[9]*rightMatrix[6])+(matrix[13]*rightMatrix[7]);
|
||||||
|
tmpMatrix[6] = (matrix[2]*rightMatrix[4])+(matrix[6]*rightMatrix[5])+(matrix[10]*rightMatrix[6])+(matrix[14]*rightMatrix[7]);
|
||||||
|
tmpMatrix[7] = (matrix[3]*rightMatrix[4])+(matrix[7]*rightMatrix[5])+(matrix[11]*rightMatrix[6])+(matrix[15]*rightMatrix[7]);
|
||||||
|
|
||||||
|
tmpMatrix[8] = (matrix[0]*rightMatrix[8])+(matrix[4]*rightMatrix[9])+(matrix[8]*rightMatrix[10])+(matrix[12]*rightMatrix[11]);
|
||||||
|
tmpMatrix[9] = (matrix[1]*rightMatrix[8])+(matrix[5]*rightMatrix[9])+(matrix[9]*rightMatrix[10])+(matrix[13]*rightMatrix[11]);
|
||||||
|
tmpMatrix[10] = (matrix[2]*rightMatrix[8])+(matrix[6]*rightMatrix[9])+(matrix[10]*rightMatrix[10])+(matrix[14]*rightMatrix[11]);
|
||||||
|
tmpMatrix[11] = (matrix[3]*rightMatrix[8])+(matrix[7]*rightMatrix[9])+(matrix[11]*rightMatrix[10])+(matrix[15]*rightMatrix[11]);
|
||||||
|
|
||||||
|
tmpMatrix[12] = (matrix[0]*rightMatrix[12])+(matrix[4]*rightMatrix[13])+(matrix[8]*rightMatrix[14])+(matrix[12]*rightMatrix[15]);
|
||||||
|
tmpMatrix[13] = (matrix[1]*rightMatrix[12])+(matrix[5]*rightMatrix[13])+(matrix[9]*rightMatrix[14])+(matrix[13]*rightMatrix[15]);
|
||||||
|
tmpMatrix[14] = (matrix[2]*rightMatrix[12])+(matrix[6]*rightMatrix[13])+(matrix[10]*rightMatrix[14])+(matrix[14]*rightMatrix[15]);
|
||||||
|
tmpMatrix[15] = (matrix[3]*rightMatrix[12])+(matrix[7]*rightMatrix[13])+(matrix[11]*rightMatrix[14])+(matrix[15]*rightMatrix[15]);
|
||||||
|
|
||||||
|
memcpy (matrix, tmpMatrix, sizeof(float)*16);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
void MatrixMulti (float* right)
|
||||||
|
{
|
||||||
|
float tmpMatrix[16];
|
||||||
|
|
||||||
|
tmpMatrix[0] = (matrix[0]*right[0])+(matrix[4]*right[1])+(matrix[8]*right[2])+(matrix[12]*right[3]);
|
||||||
|
tmpMatrix[1] = (matrix[1]*right[0])+(matrix[5]*right[1])+(matrix[9]*right[2])+(matrix[13]*right[3]);
|
||||||
|
tmpMatrix[2] = (matrix[2]*right[0])+(matrix[6]*right[1])+(matrix[10]*right[2])+(matrix[14]*right[3]);
|
||||||
|
tmpMatrix[3] = (matrix[3]*right[0])+(matrix[7]*right[1])+(matrix[11]*right[2])+(matrix[15]*right[3]);
|
||||||
|
|
||||||
|
tmpMatrix[4] = (matrix[0]*right[4])+(matrix[4]*right[5])+(matrix[8]*right[6])+(matrix[12]*right[7]);
|
||||||
|
tmpMatrix[5] = (matrix[1]*right[4])+(matrix[5]*right[5])+(matrix[9]*right[6])+(matrix[13]*right[7]);
|
||||||
|
tmpMatrix[6] = (matrix[2]*right[4])+(matrix[6]*right[5])+(matrix[10]*right[6])+(matrix[14]*right[7]);
|
||||||
|
tmpMatrix[7] = (matrix[3]*right[4])+(matrix[7]*right[5])+(matrix[11]*right[6])+(matrix[15]*right[7]);
|
||||||
|
|
||||||
|
tmpMatrix[8] = (matrix[0]*right[8])+(matrix[4]*right[9])+(matrix[8]*right[10])+(matrix[12]*right[11]);
|
||||||
|
tmpMatrix[9] = (matrix[1]*right[8])+(matrix[5]*right[9])+(matrix[9]*right[10])+(matrix[13]*right[11]);
|
||||||
|
tmpMatrix[10] = (matrix[2]*right[8])+(matrix[6]*right[9])+(matrix[10]*right[10])+(matrix[14]*right[11]);
|
||||||
|
tmpMatrix[11] = (matrix[3]*right[8])+(matrix[7]*right[9])+(matrix[11]*right[10])+(matrix[15]*right[11]);
|
||||||
|
|
||||||
|
tmpMatrix[12] = (matrix[0]*right[12])+(matrix[4]*right[13])+(matrix[8]*right[14])+(matrix[12]*right[15]);
|
||||||
|
tmpMatrix[13] = (matrix[1]*right[12])+(matrix[5]*right[13])+(matrix[9]*right[14])+(matrix[13]*right[15]);
|
||||||
|
tmpMatrix[14] = (matrix[2]*right[12])+(matrix[6]*right[13])+(matrix[10]*right[14])+(matrix[14]*right[15]);
|
||||||
|
tmpMatrix[15] = (matrix[3]*right[12])+(matrix[7]*right[13])+(matrix[11]*right[14])+(matrix[15]*right[15]);
|
||||||
|
|
||||||
|
memcpy (matrix, tmpMatrix, sizeof(float)*16);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
float* Matrix::Get (void)
|
||||||
|
{
|
||||||
|
return matrix;
|
||||||
|
}
|
||||||
|
|
||||||
|
float MatrixGet (float *matrix, int index)
|
||||||
|
{
|
||||||
|
return matrix[index];
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
float MatrixGetMultipliedIndex (int index, float *matrix, float *rightMatrix)
|
||||||
|
{
|
||||||
|
int iMod = index%4, iDiv = (index>>2)<<2;
|
||||||
|
|
||||||
|
return (matrix[iMod ]*rightMatrix[iDiv ])+(matrix[iMod+ 4]*rightMatrix[iDiv+1])+
|
||||||
|
(matrix[iMod+8]*rightMatrix[iDiv+2])+(matrix[iMod+12]*rightMatrix[iDiv+3]);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MatrixSet (float *matrix, int x, int y, float value)
|
||||||
|
{
|
||||||
|
matrix [x+(y<<2)] = value;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
void Matrix::Set (int pos, float value)
|
||||||
|
{
|
||||||
|
matrix [pos] = value;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
void MatrixCopy (float *matrixDST, float *matrixSRC)
|
||||||
|
{
|
||||||
|
memcpy (matrixDST, matrixSRC, sizeof(float)*16);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MatrixTranslate (float *matrix, float *ptr)
|
||||||
|
{
|
||||||
|
matrix[12] += (matrix[0]*ptr[0])+(matrix[4]*ptr[1])+(matrix[ 8]*ptr[2]);
|
||||||
|
matrix[13] += (matrix[1]*ptr[0])+(matrix[5]*ptr[1])+(matrix[ 9]*ptr[2]);
|
||||||
|
matrix[14] += (matrix[2]*ptr[0])+(matrix[6]*ptr[1])+(matrix[10]*ptr[2]);
|
||||||
|
matrix[15] += (matrix[3]*ptr[0])+(matrix[7]*ptr[1])+(matrix[11]*ptr[2]);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MatrixScale (float *matrix, float *ptr)
|
||||||
|
{
|
||||||
|
matrix[0] *= ptr[0];
|
||||||
|
matrix[1] *= ptr[0];
|
||||||
|
matrix[2] *= ptr[0];
|
||||||
|
matrix[3] *= ptr[0];
|
||||||
|
|
||||||
|
matrix[4] *= ptr[1];
|
||||||
|
matrix[5] *= ptr[1];
|
||||||
|
matrix[6] *= ptr[1];
|
||||||
|
matrix[7] *= ptr[1];
|
||||||
|
|
||||||
|
matrix[8] *= ptr[2];
|
||||||
|
matrix[9] *= ptr[2];
|
||||||
|
matrix[10] *= ptr[2];
|
||||||
|
matrix[11] *= ptr[2];
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
void Matrix::Set (float a11, float a21, float a31, float a41,
|
||||||
|
float a12, float a22, float a32, float a42,
|
||||||
|
float a13, float a23, float a33, float a43,
|
||||||
|
float a14, float a24, float a34, float a44)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
//-----------------------------------------
|
||||||
|
|
||||||
|
void MatrixStackInit (MatrixStack *stack)
|
||||||
|
{
|
||||||
|
stack->matrix = NULL;
|
||||||
|
stack->position = 0;
|
||||||
|
stack->size = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MatrixStackSetMaxSize (MatrixStack *stack, int size)
|
||||||
|
{
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
stack->size = size;
|
||||||
|
|
||||||
|
if (stack->matrix == NULL)
|
||||||
|
{
|
||||||
|
stack->matrix = (float*) malloc (stack->size*16*sizeof(float));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
free (stack->matrix);
|
||||||
|
stack->matrix = (float*) malloc (stack->size*16*sizeof(float));
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < stack->size; i++)
|
||||||
|
{
|
||||||
|
MatrixInit (&stack->matrix[i*16]);
|
||||||
|
}
|
||||||
|
|
||||||
|
stack->size--;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void MatrixStackSetStackPosition (MatrixStack *stack, int pos)
|
||||||
|
{
|
||||||
|
stack->position += pos;
|
||||||
|
|
||||||
|
if (stack->position < 0)
|
||||||
|
stack->position = 0;
|
||||||
|
else if (stack->position > stack->size)
|
||||||
|
stack->position = stack->size;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MatrixStackPushMatrix (MatrixStack *stack, float *ptr)
|
||||||
|
{
|
||||||
|
MatrixCopy (&stack->matrix[stack->position*16], ptr);
|
||||||
|
|
||||||
|
MatrixStackSetStackPosition (stack, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
float * MatrixStackPopMatrix (MatrixStack *stack, int size)
|
||||||
|
{
|
||||||
|
MatrixStackSetStackPosition(stack, -size);
|
||||||
|
|
||||||
|
return &stack->matrix[stack->position*16];
|
||||||
|
}
|
||||||
|
|
||||||
|
float * MatrixStackGetPos (MatrixStack *stack, int pos)
|
||||||
|
{
|
||||||
|
return &stack->matrix[pos*16];
|
||||||
|
}
|
||||||
|
|
||||||
|
float * MatrixStackGet (MatrixStack *stack)
|
||||||
|
{
|
||||||
|
return &stack->matrix[stack->position*16];
|
||||||
|
}
|
||||||
|
|
||||||
|
void MatrixStackLoadMatrix (MatrixStack *stack, int pos, float *ptr)
|
||||||
|
{
|
||||||
|
MatrixCopy (&stack->matrix[pos*16], ptr);
|
||||||
|
}
|
|
@ -0,0 +1,50 @@
|
||||||
|
/*
|
||||||
|
Copyright (C) 2006-2007 shash
|
||||||
|
|
||||||
|
This file is part of DeSmuME
|
||||||
|
|
||||||
|
DeSmuME is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
DeSmuME is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with DeSmuME; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef MATRIX_H
|
||||||
|
#define MATRIX_H
|
||||||
|
|
||||||
|
typedef struct MatrixStack
|
||||||
|
{
|
||||||
|
float *matrix;
|
||||||
|
int position;
|
||||||
|
int size;
|
||||||
|
} MatrixStack;
|
||||||
|
|
||||||
|
void MatrixInit (float *matrix);
|
||||||
|
void MatrixMultVec (float *matrix, float *vecPtr);
|
||||||
|
void MatrixIdentity (float *matrix);
|
||||||
|
void MatrixMultiply (float *matrix, float *rightMatrix);
|
||||||
|
float MatrixGetMultipliedIndex(int index, float *matrix, float *rightMatrix);
|
||||||
|
void MatrixSet (float *matrix, int x, int y, float value);
|
||||||
|
void MatrixCopy (float *matrixDST, float *matrixSRC);
|
||||||
|
void MatrixTranslate (float *matrix, float *ptr);
|
||||||
|
void MatrixScale (float *matrix, float *ptr);
|
||||||
|
|
||||||
|
void MatrixStackInit (MatrixStack *stack);
|
||||||
|
void MatrixStackSetMaxSize (MatrixStack *stack, int size);
|
||||||
|
void MatrixStackSetStackPosition (MatrixStack *stack, int pos);
|
||||||
|
void MatrixStackPushMatrix (MatrixStack *stack, float *ptr);
|
||||||
|
float* MatrixStackPopMatrix (MatrixStack *stack, int size);
|
||||||
|
float* MatrixStackGetPos (MatrixStack *stack, int pos);
|
||||||
|
float* MatrixStackGet (MatrixStack *stack);
|
||||||
|
void MatrixStackLoadMatrix (MatrixStack *stack, int pos, float *ptr);
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,86 @@
|
||||||
|
/*
|
||||||
|
Copyright (C) 2006-2007 shash
|
||||||
|
|
||||||
|
This file is part of DeSmuME
|
||||||
|
|
||||||
|
DeSmuME is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
DeSmuME is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with DeSmuME; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "render3D.h"
|
||||||
|
|
||||||
|
char NDS_nullFunc1 (void){ return 1; }
|
||||||
|
void NDS_nullFunc2 (void){}
|
||||||
|
void NDS_nullFunc3 (unsigned long v){}
|
||||||
|
void NDS_nullFunc4 (signed long v) {}
|
||||||
|
void NDS_nullFunc5 (unsigned int v){}
|
||||||
|
void NDS_nullFunc6 (unsigned int one, unsigned int two, unsigned int v){}
|
||||||
|
int NDS_nullFunc7 (void) {return 0;}
|
||||||
|
long NDS_nullFunc8 (unsigned int index){ return 0; }
|
||||||
|
void NDS_nullFunc9 (int line, unsigned short * DST) { };
|
||||||
|
|
||||||
|
GPU3DInterface gpu3DNull = { NDS_nullFunc1,
|
||||||
|
NDS_nullFunc3,
|
||||||
|
NDS_nullFunc3,
|
||||||
|
NDS_nullFunc3,
|
||||||
|
NDS_nullFunc3,
|
||||||
|
NDS_nullFunc3,
|
||||||
|
NDS_nullFunc3,
|
||||||
|
NDS_nullFunc2,
|
||||||
|
NDS_nullFunc4,
|
||||||
|
NDS_nullFunc4,
|
||||||
|
NDS_nullFunc3,
|
||||||
|
NDS_nullFunc3,
|
||||||
|
NDS_nullFunc2,
|
||||||
|
NDS_nullFunc4,
|
||||||
|
NDS_nullFunc4,
|
||||||
|
NDS_nullFunc4,
|
||||||
|
NDS_nullFunc4,
|
||||||
|
NDS_nullFunc4,
|
||||||
|
NDS_nullFunc4,
|
||||||
|
NDS_nullFunc3,
|
||||||
|
NDS_nullFunc2,
|
||||||
|
NDS_nullFunc3,
|
||||||
|
NDS_nullFunc5,
|
||||||
|
NDS_nullFunc3,
|
||||||
|
NDS_nullFunc6,
|
||||||
|
NDS_nullFunc3,
|
||||||
|
NDS_nullFunc5,
|
||||||
|
NDS_nullFunc7,
|
||||||
|
NDS_nullFunc7,
|
||||||
|
NDS_nullFunc3,
|
||||||
|
NDS_nullFunc3,
|
||||||
|
NDS_nullFunc3,
|
||||||
|
NDS_nullFunc3,
|
||||||
|
NDS_nullFunc3,
|
||||||
|
NDS_nullFunc3,
|
||||||
|
NDS_nullFunc3,
|
||||||
|
NDS_nullFunc3,
|
||||||
|
NDS_nullFunc3,
|
||||||
|
NDS_nullFunc3,
|
||||||
|
NDS_nullFunc3,
|
||||||
|
NDS_nullFunc3,
|
||||||
|
NDS_nullFunc3,
|
||||||
|
NDS_nullFunc3,
|
||||||
|
|
||||||
|
NDS_nullFunc8,
|
||||||
|
NDS_nullFunc8,
|
||||||
|
NDS_nullFunc9 };
|
||||||
|
|
||||||
|
GPU3DInterface *gpu3D = &gpu3DNull;
|
||||||
|
|
||||||
|
void NDS_3D_SetDriver (int core3DIndex)
|
||||||
|
{
|
||||||
|
gpu3D = core3DList[core3DIndex];
|
||||||
|
}
|
|
@ -0,0 +1,97 @@
|
||||||
|
/*
|
||||||
|
Copyright (C) 2006-2007 shash
|
||||||
|
|
||||||
|
This file is part of DeSmuME
|
||||||
|
|
||||||
|
DeSmuME is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
DeSmuME is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with DeSmuME; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GPU_3D
|
||||||
|
#define GPU_3D
|
||||||
|
|
||||||
|
#define C_DECL __cdecl
|
||||||
|
|
||||||
|
/*
|
||||||
|
enum DRIVER_3D
|
||||||
|
{
|
||||||
|
DRIVER_NULL = 0,
|
||||||
|
DRIVER_OPENGL
|
||||||
|
};
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef struct GPU3DInterface
|
||||||
|
{
|
||||||
|
char (C_DECL* NDS_3D_Init) (void);
|
||||||
|
void (C_DECL* NDS_3D_ViewPort) (unsigned long v);
|
||||||
|
void (C_DECL* NDS_3D_ClearColor) (unsigned long v);
|
||||||
|
void (C_DECL* NDS_3D_FogColor) (unsigned long v);
|
||||||
|
void (C_DECL* NDS_3D_FogOffset) (unsigned long v);
|
||||||
|
void (C_DECL* NDS_3D_ClearDepth) (unsigned long v);
|
||||||
|
void (C_DECL* NDS_3D_MatrixMode) (unsigned long v);
|
||||||
|
void (C_DECL* NDS_3D_LoadIdentity) (void);
|
||||||
|
void (C_DECL* NDS_3D_LoadMatrix4x4) (signed long v);
|
||||||
|
void (C_DECL* NDS_3D_LoadMatrix4x3) (signed long v);
|
||||||
|
void (C_DECL* NDS_3D_StoreMatrix) (unsigned long v);
|
||||||
|
void (C_DECL* NDS_3D_RestoreMatrix) (unsigned long v);
|
||||||
|
void (C_DECL* NDS_3D_PushMatrix) (void);
|
||||||
|
void (C_DECL* NDS_3D_PopMatrix) (signed long i);
|
||||||
|
void (C_DECL* NDS_3D_Translate) (signed long v);
|
||||||
|
void (C_DECL* NDS_3D_Scale) (signed long v);
|
||||||
|
void (C_DECL* NDS_3D_MultMatrix3x3) (signed long v);
|
||||||
|
void (C_DECL* NDS_3D_MultMatrix4x3) (signed long v);
|
||||||
|
void (C_DECL* NDS_3D_MultMatrix4x4) (signed long v);
|
||||||
|
void (C_DECL* NDS_3D_Begin) (unsigned long v);
|
||||||
|
void (C_DECL* NDS_3D_End) (void);
|
||||||
|
void (C_DECL* NDS_3D_Color3b) (unsigned long v);
|
||||||
|
void (C_DECL* NDS_3D_Vertex16b) (unsigned int v);
|
||||||
|
void (C_DECL* NDS_3D_Vertex10b) (unsigned long v);
|
||||||
|
void (C_DECL* NDS_3D_Vertex3_cord) (unsigned int one, unsigned int two, unsigned int v);
|
||||||
|
void (C_DECL* NDS_3D_Vertex_rel) (unsigned long v);
|
||||||
|
void (C_DECL* NDS_3D_SwapScreen) (unsigned int screen);
|
||||||
|
int (C_DECL* NDS_3D_GetNumPolys) (void); // THIS IS A HACK :D
|
||||||
|
int (C_DECL* NDS_3D_GetNumVertex) (void);
|
||||||
|
void (C_DECL* NDS_3D_Flush) (unsigned long v);
|
||||||
|
void (C_DECL* NDS_3D_PolygonAttrib) (unsigned long val);
|
||||||
|
void (C_DECL* NDS_3D_Material0) (unsigned long val);
|
||||||
|
void (C_DECL* NDS_3D_Material1) (unsigned long val);
|
||||||
|
void (C_DECL* NDS_3D_Shininess) (unsigned long val);
|
||||||
|
void (C_DECL* NDS_3D_TexImage) (unsigned long val);
|
||||||
|
void (C_DECL* NDS_3D_TexPalette) (unsigned long val);
|
||||||
|
void (C_DECL* NDS_3D_TexCoord) (unsigned long val);
|
||||||
|
void (C_DECL* NDS_3D_LightDirection) (unsigned long v);
|
||||||
|
void (C_DECL* NDS_3D_LightColor) (unsigned long v);
|
||||||
|
void (C_DECL* NDS_3D_AlphaFunc) (unsigned long v);
|
||||||
|
void (C_DECL* NDS_3D_Control) (unsigned long v);
|
||||||
|
void (C_DECL* NDS_3D_Normal) (unsigned long v);
|
||||||
|
void (C_DECL* NDS_3D_CallList) (unsigned long v);
|
||||||
|
|
||||||
|
long (C_DECL* NDS_3D_GetClipMatrix) (unsigned int index);
|
||||||
|
long (C_DECL* NDS_3D_GetDirectionalMatrix) (unsigned int index);
|
||||||
|
void (C_DECL* NDS_3D_GetLine) (int line, unsigned short * DST);
|
||||||
|
} GPU3DInterface;
|
||||||
|
|
||||||
|
// gpu 3D core list, per port
|
||||||
|
extern GPU3DInterface *core3DList[];
|
||||||
|
|
||||||
|
// Default null plugin
|
||||||
|
#define GPU3D_NULL 0
|
||||||
|
extern GPU3DInterface gpu3DNull;
|
||||||
|
|
||||||
|
// Extern pointer
|
||||||
|
extern GPU3DInterface *gpu3D;
|
||||||
|
|
||||||
|
void NDS_3D_SetDriver (int core3DIndex);
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in New Issue