t377y000 wrote:
heres a screencap.
You really, really shouldn't be putting code in headers like that ...
The project archive you linked to still had the model loading in the loop which isn't a great idea. Somehow I doubt malloc & file io will do much for your frame rate in every display loop. Lack of error checking isn't really helping you track down your problem either.
I got your code to work in a couple of minutes but, to be fair, this stuff probably isn't the most obvious. I moved the teapot.bin into the nitrofs folder so it gets added to the filesystem rather than embedded in the binary, then added nitroFSInit(NULL); at the start of the code so the filesystem is initialised. I rearranged your code a bit to take the loading out of the display loop as well.
Code: Select all
#include <nds.h>
#include <filesystem.h>
#include <stdio.h>
//teapot display list provided by Mike260, as well as the display list gl code.
//#include "teapot_bin.h"
int main() {
float rotateX = 0.0;
float rotateY = 0.0;
//set mode 0, enable BG0 and set it to 3D
videoSetMode(MODE_0_3D);
nitroFSInit(NULL);
FILE *pFile; char * buffer; size_t dataInFile; long fileSize;
pFile = fopen("teapot.bin", "rb");
fseek(pFile, 0, SEEK_END);
fileSize = ftell(pFile);
rewind(pFile);
buffer = (char*)malloc(fileSize+1);
//buffer = (char*) malloc (sizeof(char)*fileSize);
dataInFile = fread(buffer, 1, fileSize, pFile);
fclose (pFile);
// initialize gl
glInit();
// enable antialiasing
glEnable(GL_ANTIALIAS);
// setup the rear plane
glClearColor(0,0,0,31); // BG must be opaque for AA to work
glClearPolyID(63); // BG must have a unique polygon ID for AA to work
glClearDepth(0x7FFF);
//this should work the same as the normal gl call
glViewport(0,0,255,191);
//any floating point gl call is being converted to fixed prior to being implemented
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(70, 256.0 / 192.0, 0.1, 40);
gluLookAt( 0.0, 0.0, 3.5, //camera possition
0.0, 0.0, 0.0, //look at
0.0, 1.0, 0.0); //up
glLight(0, RGB15(31,31,31) , 0, floattov10(-1.0), 0);
glLight(1, RGB15(31,0,31), 0, floattov10(1) - 1, 0);
glLight(2, RGB15(0,31,0) , floattov10(-1.0), 0, 0);
glLight(3, RGB15(0,0,31) , floattov10(1.0) - 1, 0, 0);
//not a real gl function and will likely change
glPolyFmt(POLY_ALPHA(31) | POLY_CULL_BACK | POLY_FORMAT_LIGHT0 | POLY_FORMAT_LIGHT1 |
POLY_FORMAT_LIGHT2 | POLY_FORMAT_LIGHT3 ) ;
while(1)
{
glPushMatrix();
glRotateX(rotateX);
glRotateY(rotateY);
scanKeys();
u16 keys = keysHeld();
if(!(keys & KEY_UP)) rotateX += 3;
if(!(keys & KEY_DOWN)) rotateX -= 3;
if(!(keys & KEY_LEFT)) rotateY += 3;
if(!(keys & KEY_RIGHT)) rotateY -= 3;
glCallList((u32*)buffer);
fclose(pFile);
glPopMatrix(1);
glFlush(0);
}
free(buffer);
return 0;
}//end main