mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-15 10:35:11 -04:00
NDS: Optimise rendering to be a little bit faster
This commit is contained in:
parent
d6c51983ac
commit
ae3ac8cdb1
@ -469,16 +469,25 @@ static void Draw_ColouredTriangles(int verticesCount, int startVertex) {
|
|||||||
static void Draw_TexturedTriangles(int verticesCount, int startVertex) {
|
static void Draw_TexturedTriangles(int verticesCount, int startVertex) {
|
||||||
glBegin(GL_QUADS);
|
glBegin(GL_QUADS);
|
||||||
int width = 0, height = 0;
|
int width = 0, height = 0;
|
||||||
glGetInt(GL_GET_TEXTURE_WIDTH, &width); width = inttof32(width);
|
glGetInt(GL_GET_TEXTURE_WIDTH, &width);
|
||||||
glGetInt(GL_GET_TEXTURE_HEIGHT, &height); height = inttof32(height);
|
glGetInt(GL_GET_TEXTURE_HEIGHT, &height);
|
||||||
|
|
||||||
|
// Original code used was
|
||||||
|
// U = mulf32(v->u, inttof32(width))
|
||||||
|
// which behind the scenes expands to
|
||||||
|
// W = width << 12
|
||||||
|
// U = ((int64)v->u * W) >> 12;
|
||||||
|
// and in this case, the bit shifts can be cancelled out
|
||||||
|
// to avoid calling __aeabi_lmul to perform the 64 bit multiplication
|
||||||
|
// therefore the code can be simplified to
|
||||||
|
// U = v->u * width
|
||||||
|
|
||||||
for (int i = 0; i < verticesCount; i++)
|
for (int i = 0; i < verticesCount; i++)
|
||||||
{
|
{
|
||||||
struct DSTexturedVertex* v = (struct DSTexturedVertex*)gfx_vertices + startVertex + i;
|
struct DSTexturedVertex* v = (struct DSTexturedVertex*)gfx_vertices + startVertex + i;
|
||||||
|
|
||||||
GFX_COLOR = v->rgb;
|
GFX_COLOR = v->rgb;
|
||||||
glTexCoord2t16(f32tot16(mulf32(v->u, width)), f32tot16(mulf32(v->v, height)));
|
GFX_TEX_COORD = TEXTURE_PACK(f32tot16(v->u * width), f32tot16(v->v * height));
|
||||||
GFX_VERTEX16 = v->xy;
|
GFX_VERTEX16 = v->xy;
|
||||||
GFX_VERTEX16 = v->z;
|
GFX_VERTEX16 = v->z;
|
||||||
}
|
}
|
||||||
|
@ -30,7 +30,7 @@ extern u8 default_fontTiles[];
|
|||||||
#define FONT_ASCII_OFFSET 32
|
#define FONT_ASCII_OFFSET 32
|
||||||
static u16* conFontBgMap;
|
static u16* conFontBgMap;
|
||||||
static int conFontCurPal;
|
static int conFontCurPal;
|
||||||
static int conCursorX, conCursorY;
|
static int conCursorX, conCurrentRow;
|
||||||
|
|
||||||
static void consoleClear(void) {
|
static void consoleClear(void) {
|
||||||
for (int i = 0; i < CON_WIDTH * CON_HEIGHT; i++)
|
for (int i = 0; i < CON_WIDTH * CON_HEIGHT; i++)
|
||||||
@ -39,16 +39,16 @@ static void consoleClear(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
conCursorX = 0;
|
conCursorX = 0;
|
||||||
conCursorY = 0;
|
conCurrentRow = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void consoleNewLine(void) {
|
static void consoleNewLine(void) {
|
||||||
conCursorX = 0;
|
conCursorX = 0;
|
||||||
conCursorY++;
|
conCurrentRow++;
|
||||||
if (conCursorY < CON_HEIGHT) return;
|
if (conCurrentRow < CON_HEIGHT) return;
|
||||||
|
|
||||||
// Shift entire screen upwards by one row
|
// Shift entire screen upwards by one row
|
||||||
conCursorY--;
|
conCurrentRow--;
|
||||||
|
|
||||||
for (int y = 0; y < CON_HEIGHT - 1; y++)
|
for (int y = 0; y < CON_HEIGHT - 1; y++)
|
||||||
{
|
{
|
||||||
@ -72,13 +72,12 @@ static void consolePrintChar(char c) {
|
|||||||
consoleNewLine();
|
consoleNewLine();
|
||||||
|
|
||||||
u16 value = conFontCurPal | (c - FONT_ASCII_OFFSET);
|
u16 value = conFontCurPal | (c - FONT_ASCII_OFFSET);
|
||||||
conFontBgMap[conCursorX + conCursorY * CON_WIDTH] = value;
|
conFontBgMap[conCursorX + conCurrentRow * CON_WIDTH] = value;
|
||||||
conCursorX++;
|
conCursorX++;
|
||||||
}
|
}
|
||||||
|
|
||||||
void consolePrintString(const char* ptr, int len) {
|
void consolePrintString(const char* ptr, int len) {
|
||||||
if (!conFontBgMap) return;
|
if (!conFontBgMap) return;
|
||||||
consoleClear();
|
|
||||||
|
|
||||||
for (int i = 0; i < len; i++)
|
for (int i = 0; i < len; i++)
|
||||||
{
|
{
|
||||||
@ -103,7 +102,7 @@ static void consoleLoadFont(u16* fontBgGfx) {
|
|||||||
if (row & 0x20) gfx |= 0x00F00000;
|
if (row & 0x20) gfx |= 0x00F00000;
|
||||||
if (row & 0x40) gfx |= 0x0F000000;
|
if (row & 0x40) gfx |= 0x0F000000;
|
||||||
if (row & 0x80) gfx |= 0xF0000000;
|
if (row & 0x80) gfx |= 0xF0000000;
|
||||||
((u32 *)conFontBgGfx)[i] = gfx;
|
((u32 *)fontBgGfx)[i] = gfx;
|
||||||
}
|
}
|
||||||
|
|
||||||
palette[16 * 16 - 1] = RGB15(31, 31, 31);
|
palette[16 * 16 - 1] = RGB15(31, 31, 31);
|
||||||
@ -328,9 +327,10 @@ void OnscreenKeyboard_Draw3D(void) { }
|
|||||||
|
|
||||||
void OnscreenKeyboard_Close(void) {
|
void OnscreenKeyboard_Close(void) {
|
||||||
keyboardHide();
|
keyboardHide();
|
||||||
|
if (!keyboardOpen) return;
|
||||||
keyboardOpen = false;
|
keyboardOpen = false;
|
||||||
ResetHBank(); // reset shared VRAM
|
|
||||||
|
|
||||||
|
ResetHBank(); // reset shared VRAM
|
||||||
videoBgEnableSub(0); // show console
|
videoBgEnableSub(0); // show console
|
||||||
consoleInit();
|
consoleInit();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user