Sfoglia il codice sorgente

Upload all vertex buffers on each frame. It is not noticeably slower

for now. Also, fullscreen support.
legacy
Sam Hocevar sam 14 anni fa
parent
commit
d4834f0160
1 ha cambiato i file con 32 aggiunte e 26 eliminazioni
  1. +32
    -26
      test-map.cpp

+ 32
- 26
test-map.cpp Vedi File

@@ -49,30 +49,6 @@ void LoadGLTextures(void)
void MakeVBOs(void)
{
glGenBuffers(3, buflist);

float vertices[8 * 20 * 15];
for (int y = 0; y < 15; y++)
for (int x = 0; x < 20; x++)
{
vertices[8 * (20 * y + x) + 0] = x * 32;
vertices[8 * (20 * y + x) + 1] = y * 32;
vertices[8 * (20 * y + x) + 2] = x * 32 + 32;
vertices[8 * (20 * y + x) + 3] = y * 32;
vertices[8 * (20 * y + x) + 4] = x * 32 + 32;
vertices[8 * (20 * y + x) + 5] = y * 32 + 32;
vertices[8 * (20 * y + x) + 6] = x * 32;
vertices[8 * (20 * y + x) + 7] = y * 32 + 32;
}
glBindBuffer(GL_ARRAY_BUFFER, buflist[0]);
glBufferData(GL_ARRAY_BUFFER,
8 * 20 * 15 * sizeof(float), vertices, GL_STATIC_DRAW);

int indices[4 * 20 * 15];
for (int n = 0; n < 4 * 20 * 15; n++)
indices[n] = n;
glBindBuffer(GL_ARRAY_BUFFER, buflist[2]);
glBufferData(GL_ARRAY_BUFFER,
4 * 20 * 15 * sizeof(int), indices, GL_STATIC_DRAW);
}

void InitGL(int Width, int Height)
@@ -124,6 +100,30 @@ void PutMap(int const *themap)
glBufferData(GL_ARRAY_BUFFER,
8 * 20 * 15 * sizeof(float), uvs, GL_STATIC_DRAW);

float vertices[8 * 20 * 15];
for (int y = 0; y < 15; y++)
for (int x = 0; x < 20; x++)
{
vertices[8 * (20 * y + x) + 0] = x * 32;
vertices[8 * (20 * y + x) + 1] = y * 32;
vertices[8 * (20 * y + x) + 2] = x * 32 + 32;
vertices[8 * (20 * y + x) + 3] = y * 32;
vertices[8 * (20 * y + x) + 4] = x * 32 + 32;
vertices[8 * (20 * y + x) + 5] = y * 32 + 32;
vertices[8 * (20 * y + x) + 6] = x * 32;
vertices[8 * (20 * y + x) + 7] = y * 32 + 32;
}
glBindBuffer(GL_ARRAY_BUFFER, buflist[0]);
glBufferData(GL_ARRAY_BUFFER,
8 * 20 * 15 * sizeof(float), vertices, GL_STATIC_DRAW);

int indices[4 * 20 * 15];
for (int n = 0; n < 4 * 20 * 15; n++)
indices[n] = n;
glBindBuffer(GL_ARRAY_BUFFER, buflist[2]);
glBufferData(GL_ARRAY_BUFFER,
4 * 20 * 15 * sizeof(int), indices, GL_STATIC_DRAW);

glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnableClientState(GL_INDEX_ARRAY);
@@ -197,6 +197,7 @@ void DrawScene()

int main(int argc, char **argv)
{
SDL_Surface *video;
int done;

/* Initialize SDL for video output */
@@ -207,7 +208,8 @@ int main(int argc, char **argv)
}

/* Create a 640x480 OpenGL screen */
if (SDL_SetVideoMode(640, 480, 0, SDL_OPENGL) == NULL)
video = SDL_SetVideoMode(640, 480, 0, SDL_OPENGL);
if (!video)
{
fprintf(stderr, "Unable to create OpenGL screen: %s\n", SDL_GetError());
SDL_Quit();
@@ -235,8 +237,12 @@ int main(int argc, char **argv)
if (event.type == SDL_QUIT)
done = 1;
if (event.type == SDL_KEYDOWN)
if (event.key.keysym.sym == SDLK_ESCAPE)
{
if (event.key.keysym.sym == SDLK_RETURN)
SDL_WM_ToggleFullScreen(video);
else if (event.key.keysym.sym == SDLK_ESCAPE)
done = 1;
}
}

while (SDL_GetTicks() < ticks + 33)


Caricamento…
Annulla
Salva