source: trunk/test-map.cpp @ 14

Last change on this file since 14 was 14, checked in by sam, 11 years ago

Testing object layers.

  • Property svn:keywords set to Id
File size: 7.9 KB
Line 
1// Test stuff
2
3#ifdef WIN32
4#   define WIN32_LEAN_AND_MEAN
5#   include <windows.h>
6#endif
7#if defined __APPLE__ && defined __MACH__
8#   include <OpenGL/gl.h>
9#else
10#   define GL_GLEXT_PROTOTYPES
11#   include <GL/gl.h>
12#   include <GL/glext.h>
13#endif
14
15#include <SDL.h>
16#include <SDL_image.h>
17
18#include <math.h>
19
20int frames;
21
22/* Storage for one texture  */
23GLuint texture[1];
24
25/* Storage for 3 vertex buffers */
26GLuint buflist[3];
27
28// Load Bitmaps And Convert To Textures
29void LoadGLTextures(void)
30{       
31    SDL_Surface *image1 = IMG_Load("art/test/groundtest.png");
32
33    if (!image1)
34    {
35        SDL_Quit();
36        exit(1);
37    }
38
39    glGenTextures(1, &texture[0]);
40    glBindTexture(GL_TEXTURE_2D, texture[0]);
41
42    glTexImage2D(GL_TEXTURE_2D, 0, 4, image1->w, image1->h, 0,
43                 GL_RGBA, GL_UNSIGNED_BYTE, image1->pixels);
44
45    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
46    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
47};
48
49void MakeVBOs(void)
50{
51    glGenBuffers(3, buflist);
52
53    float vertices[8 * 20 * 15];
54    for (int y = 0; y < 15; y++)
55        for (int x = 0; x < 20; x++)
56        {
57            vertices[8 * (20 * y + x) + 0] = x * 32;
58            vertices[8 * (20 * y + x) + 1] = y * 32;
59            vertices[8 * (20 * y + x) + 2] = x * 32 + 32;
60            vertices[8 * (20 * y + x) + 3] = y * 32;
61            vertices[8 * (20 * y + x) + 4] = x * 32 + 32;
62            vertices[8 * (20 * y + x) + 5] = y * 32 + 32;
63            vertices[8 * (20 * y + x) + 6] = x * 32;
64            vertices[8 * (20 * y + x) + 7] = y * 32 + 32;
65        }
66    glBindBuffer(GL_ARRAY_BUFFER, buflist[0]);
67    glBufferData(GL_ARRAY_BUFFER,
68                 8 * 20 * 15 * sizeof(float), vertices, GL_STATIC_DRAW);
69
70    int indices[4 * 20 * 15];
71    for (int n = 0; n < 4 * 20 * 15; n++)
72        indices[n] = n;
73    glBindBuffer(GL_ARRAY_BUFFER, buflist[2]);
74    glBufferData(GL_ARRAY_BUFFER,
75                 4 * 20 * 15 * sizeof(int), indices, GL_STATIC_DRAW);
76}
77
78void InitGL(int Width, int Height)
79{
80    // Resize method
81    glViewport(0, 0, Width, Height);
82    glMatrixMode(GL_PROJECTION);
83    glLoadIdentity();
84    glOrtho(0, Width, Height, 0, -1, 10);
85    glMatrixMode(GL_MODELVIEW);
86    glLoadIdentity();
87
88    // Init method
89    glEnable(GL_TEXTURE_2D);
90    LoadGLTextures();
91    MakeVBOs();
92    glShadeModel(GL_SMOOTH);
93    glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
94    glClearDepth(1.0);
95    glEnable(GL_DEPTH_TEST);
96    glDepthFunc(GL_LEQUAL);
97    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
98
99    glEnable(GL_BLEND);
100    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
101}
102
103void PutMap(int const *themap)
104{
105    // Put map
106    float uvs[8 * 20 * 15];
107
108    for (int y = 0; y < 15; y++)
109        for (int x = 0; x < 20; x++)
110        {
111            int tile = themap[20 * y + x];
112            float ty = .0625f * (tile / 16);
113            float tx = .0625f * (tile % 16);
114            uvs[8 * (20 * y + x) + 0] = tx;
115            uvs[8 * (20 * y + x) + 1] = ty;
116            uvs[8 * (20 * y + x) + 2] = tx + .0625f;
117            uvs[8 * (20 * y + x) + 3] = ty;
118            uvs[8 * (20 * y + x) + 4] = tx + .0625f;
119            uvs[8 * (20 * y + x) + 5] = ty + .0625f;
120            uvs[8 * (20 * y + x) + 6] = tx;
121            uvs[8 * (20 * y + x) + 7] = ty + .0625f;
122        }
123    glBindBuffer(GL_ARRAY_BUFFER, buflist[1]);
124    glBufferData(GL_ARRAY_BUFFER,
125                 8 * 20 * 15 * sizeof(float), uvs, GL_STATIC_DRAW);
126
127    glEnableClientState(GL_VERTEX_ARRAY);
128    glEnableClientState(GL_TEXTURE_COORD_ARRAY);
129    glEnableClientState(GL_INDEX_ARRAY);
130
131    glBindTexture(GL_TEXTURE_2D, texture[0]);
132
133    glBindBuffer(GL_ARRAY_BUFFER, buflist[0]);
134    glVertexPointer(2, GL_FLOAT, 0, NULL);
135    glBindBuffer(GL_ARRAY_BUFFER, buflist[1]);
136    glTexCoordPointer(2, GL_FLOAT, 0, NULL);
137    glBindBuffer(GL_ARRAY_BUFFER, buflist[2]);
138    glIndexPointer(GL_INT, 0, NULL);
139
140    glDrawArrays(GL_QUADS, 0, 4 * 20 * 15);
141
142    glDisableClientState(GL_VERTEX_ARRAY);
143    glDisableClientState(GL_TEXTURE_COORD_ARRAY);
144    glDisableClientState(GL_INDEX_ARRAY);
145}
146
147/* The main drawing function. */
148void DrawScene()
149{
150    int ground[20 * 15] =
151    {
15218, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
15318,  1,  2,  2,  2, 34,  2,  2,  2,  2,  2,  2,  3, 34,  4, 18, 18, 18, 18, 18,
15418, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 17, 18, 20,  4, 18, 18, 18, 18,
15518, 19, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 17, 18, 17, 19, 18, 18, 18, 18,
15618, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 17, 18, 17, 17, 18, 18, 18, 18,
15718, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 18, 20, 36, 18, 18, 18, 18,
15818, 33,  2,  2,  2,  2,  2,  2,  2,  2, 34,  2, 35,  2, 36, 18, 18, 18, 18, 18,
15918, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
16016, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16116, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16216, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16316, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16416, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16516, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16616, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
167    };
168
169    int l1objects[20 * 15] =
170    {
171 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
172 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
173 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
174 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
175 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 49,  0,  0,  0,  0,  0,  0,  0,  0,
176 0,  0,  0,  0, 49, 49,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
177 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
178 0,  0,  0,  0, 49, 49, 49, 49, 49, 49,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
179 0,  0,  0,  0,  0, 49, 49, 49, 49,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
180 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 48,  0, 32, 49,  0,  0,  0,
181 0,  0,  0, 49, 49, 32,  0, 50,  0,  0,  0, 48,  0, 64,  0, 49, 49,  0,  0,  0,
182 0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,
183 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,
184 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
185 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
186    };
187
188    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
189    glLoadIdentity();
190
191    PutMap(ground);
192    //glTranslatef(10.0f * sinf(0.16f * frames), 10.0f * cosf(0.16f * frames), 0.0f);
193    PutMap(l1objects);
194
195    SDL_GL_SwapBuffers();
196}
197
198int main(int argc, char **argv)
199{
200  int done;
201
202  /* Initialize SDL for video output */
203  if (SDL_Init(SDL_INIT_VIDEO) < 0)
204  {
205    fprintf(stderr, "Unable to initialize SDL: %s\n", SDL_GetError());
206    exit(1);
207  }
208
209  /* Create a 640x480 OpenGL screen */
210  if (SDL_SetVideoMode(640, 480, 0, SDL_OPENGL) == NULL)
211  {
212    fprintf(stderr, "Unable to create OpenGL screen: %s\n", SDL_GetError());
213    SDL_Quit();
214    exit(2);
215  }
216
217  /* Set the title bar in environments that support it */
218  SDL_WM_SetCaption("Deus Hax", NULL);
219
220  /* Loop, drawing and checking events */
221  InitGL(640, 480);
222  done = 0;
223  frames = 0;
224  Uint32 ticks = SDL_GetTicks();
225  Uint32 start = ticks;
226  while (!done)
227  {
228    DrawScene();
229    frames++;
230
231    /* This could go in a separate function */
232    SDL_Event event;
233    while (SDL_PollEvent(&event))
234    {
235      if (event.type == SDL_QUIT)
236        done = 1;
237      if (event.type == SDL_KEYDOWN)
238        if (event.key.keysym.sym == SDLK_ESCAPE)
239          done = 1;
240    }
241
242    while (SDL_GetTicks() < ticks + 33)
243        SDL_Delay(1);
244    ticks = SDL_GetTicks();
245  }
246  printf("%i fps\n", frames * 1000 / (SDL_GetTicks() - start));
247  SDL_Quit();
248
249  return EXIT_SUCCESS;
250}
251
Note: See TracBrowser for help on using the repository browser.