DEADSOFTWARE

a4c6589293b5299caae67450658a663e3330134c
[d2df-sdl.git] / src / nogl / noGLES1.inc
1 implementation
3 uses SDL2;
5 const
6 GL_FLOAT = $1406;
7 GL_VERTEX_ARRAY = $8074;
8 GL_NORMAL_ARRAY = $8075;
9 GL_COLOR_ARRAY = $8076;
10 GL_TEXTURE_COORD_ARRAY = $8078;
11 GL_TRIANGLES = $0004;
12 GL_TEXTURE0 = $84C0;
13 GL_INVALID_ENUM = $0500;
15 const
16 ValPerVertex = 2;
17 ValPerColor = 4;
18 ValPerCoord = 2;
20 type
21 TArrayFloat = array of GLfloat;
23 TCmds = record
24 mode: GLenum;
25 v, c, t: TArrayFloat;
26 end;
28 var
29 cmds: TCmds;
31 var
32 es_glVertexPointer: procedure (size: GLint; _type: GLenum; stride: GLsizei; pointer: PGLvoid); cdecl;
33 es_glColorPointer: procedure (size: GLint; _type: GLenum; stride: GLsizei; pointer: PGLvoid); cdecl;
34 es_glTexCoordPointer: procedure (size: GLint; _type: GLenum; stride: GLsizei; pointer: PGLvoid); cdecl;
35 es_glEnableClientState: procedure (arr: GLenum); cdecl;
36 es_glDisableClientState: procedure (arr: GLenum); cdecl;
37 es_glDrawArrays: procedure (mode: GLenum; first: GLint; count: GLsizei); cdecl;
38 es_glActiveTexture: procedure(texture: GLenum); cdecl;
39 es_glClientActiveTexture: procedure(texture: GLenum); cdecl;
40 es_glColor4f: procedure(red, green, blue, alpha: GLfloat); cdecl;
42 es_glEnable: procedure (cap: GLenum); cdecl;
43 es_glDisable: procedure (cap: GLenum); cdecl;
44 es_glIsEnabled: function (cap: GLenum): GLBoolean; cdecl;
45 es_glGetString: function (name: GLenum): PChar; cdecl;
46 es_glClearColor: procedure (red, green, blue, alpha: GLclampf); cdecl;
47 es_glClear: procedure (mask: GLbitfield); cdecl;
48 es_glAlphaFunc: procedure (func: GLenum; ref: GLclampf); cdecl;
49 es_glBlendFunc: procedure (sfactor, dfactor: GLenum); cdecl;
50 es_glPointSize: procedure (size: GLfloat); cdecl;
51 es_glLineWidth: procedure (width: GLfloat); cdecl;
52 es_glGetIntegerv: procedure (pname: GLenum; params: PGLint); cdecl;
53 es_glFlush: procedure; cdecl;
54 es_glFinish: procedure; cdecl;
56 es_glLoadIdentity: procedure; cdecl;
57 es_glMatrixMode: procedure (mode: GLenum); cdecl;
58 es_glLoadMatrixf: procedure (m: PGLfloat); cdecl;
59 es_glPushMatrix: procedure; cdecl;
60 es_glPopMatrix: procedure; cdecl;
61 es_glTranslatef: procedure (x, y, z: GLfloat); cdecl;
62 es_glRotatef: procedure (angle, x, y, z: GLfloat); cdecl;
63 es_glScalef: procedure (x, y, z: GLfloat); cdecl;
65 es_glReadPixels: procedure (x, y: GLint; width, height: GLsizei; format,_type: GLenum; pixels: PGLvoid); cdecl;
67 es_glViewport: procedure (x, y: GLint; width, height: GLsizei); cdecl;
68 es_glScissor: procedure (x, y: GLint; width, height: GLsizei); cdecl;
69 es_glStencilMask: procedure (mask: GLuint); cdecl;
70 es_glStencilFunc: procedure (func: GLenum; ref: GLint; mask: GLuint); cdecl;
71 es_glStencilOp: procedure (fail, zfail, zpass: GLenum); cdecl;
72 es_glColorMask: procedure (red: GLboolean; green: GLboolean; blue: GLboolean; alpha: GLboolean); cdecl;
74 es_glBindTexture: procedure (target: GLenum; texture: GLuint); cdecl;
75 es_glGenTextures: procedure (n: GLsizei; textures: PGLuint); cdecl;
76 es_glTexEnvi: procedure (target: GLenum; pname: GLenum; param: GLint); cdecl;
77 es_glTexParameterf: procedure (target: GLenum; pname: GLenum; param: GLfloat); cdecl;
78 es_glTexParameteri: procedure (target: GLenum; pname: GLenum; param: GLint); cdecl;
79 es_glTexImage2D: procedure (target: GLenum; level, internalformat: GLint; width, height: GLsizei; border: GLint; format, _type:GLenum; pixels: PGLvoid); cdecl;
80 es_glTexSubImage2D: procedure (target: GLenum; level: GLint; xoffset, yoffset: GLint; width, height: GLsizei; format, _type: GLenum; pixels: PGLvoid); cdecl;
81 es_glDeleteTextures: procedure (n: GLsizei; textures: PGLuint); cdecl;
83 procedure glEnable(cap: GLenum);
84 begin
85 es_glEnable(cap);
86 end;
88 procedure glDisable(cap: GLenum);
89 begin
90 es_glDisable(cap);
91 end;
93 function glIsEnabled(cap: GLenum): GLboolean;
94 begin
95 result := es_glIsEnabled(cap);
96 end;
98 function glGetString(name: GLenum): PChar;
99 begin
100 result := es_glGetString(name);
101 end;
103 procedure glClearColor(red, green, blue, alpha: GLclampf);
104 begin
105 es_glClearColor(red, green, blue, alpha);
106 end;
108 procedure glClear(mask: GLbitfield);
109 begin
110 es_glClear(mask);
111 end;
113 procedure glAlphaFunc(func: GLenum; ref: GLclampf);
114 begin
115 es_glAlphaFunc(func, ref);
116 end;
118 procedure glBlendFunc(sfactor, dfactor: GLenum);
119 begin
120 es_glBlendFunc(sfactor, dfactor);
121 end;
123 procedure glPointSize(size: GLfloat);
124 begin
125 es_glPointSize(size);
126 end;
128 procedure glLineWidth(width: GLfloat);
129 begin
130 es_glLineWidth(width);
131 end;
133 procedure glGetIntegerv(pname: GLenum; params: PGLint);
134 begin
135 es_glGetIntegerv(pname, params);
136 end;
138 procedure glFlush;
139 begin
140 es_glFlush;
141 end;
143 procedure glFinish;
144 begin
145 es_glFinish;
146 end;
152 procedure glBegin(mode: GLenum);
153 begin
154 assert(cmds.mode = GL_INVALID_ENUM);
155 assert((mode = GL_POINTS) or (mode = GL_LINES) or (mode = GL_QUADS));
156 cmds.mode := mode;
157 SetLength(cmds.v, 0);
158 SetLength(cmds.c, 0);
159 SetLength(cmds.t, 0);
160 end;
162 procedure glEnd;
163 var count: Integer;
164 begin
165 assert(cmds.mode <> GL_INVALID_ENUM);
166 assert(Length(cmds.v) mod ValPerVertex = 0);
167 assert(Length(cmds.c) mod ValPerColor = 0);
168 assert(Length(cmds.t) mod ValPerCoord = 0);
169 if Length(cmds.c) <> 0 then
170 assert(Length(cmds.v) div ValPerVertex = Length(cmds.c) div ValPerColor);
171 if Length(cmds.t) <> 0 then
172 assert(Length(cmds.v) div ValPerVertex = Length(cmds.t) div ValPerCoord);
174 es_glVertexPointer(ValPerVertex, GL_FLOAT, 0, @cmds.v[0]);
175 es_glColorPointer(ValPerColor, GL_FLOAT, 0, @cmds.c[0]);
176 es_glTexCoordPointer(ValPerCoord, GL_FLOAT, 0, @cmds.t[0]);
177 es_glEnableClientState(GL_VERTEX_ARRAY);
178 es_glEnableClientState(GL_COLOR_ARRAY);
179 es_glEnableClientState(GL_TEXTURE_COORD_ARRAY);
180 es_glDisableClientState(GL_NORMAL_ARRAY);
182 if Length(cmds.c) = 0 then
183 es_glDisableClientState(GL_COLOR_ARRAY);
184 if Length(cmds.t) = 0 then
185 es_glDisableClientState(GL_TEXTURE_COORD_ARRAY);
187 if cmds.mode = GL_QUADS then
188 es_glDrawArrays(GL_TRIANGLES, 0, Length(cmds.v) div ValPerVertex)
189 else
190 es_glDrawArrays(cmds.mode, 0, Length(cmds.v) div ValPerVertex);
192 SetLength(cmds.v, 0);
193 SetLength(cmds.c, 0);
194 SetLength(cmds.t, 0);
195 cmds.mode := GL_INVALID_ENUM;
196 end;
198 (* ---------- begin internals ---------- *)
200 procedure AddFloatRaw (var x: TArrayFloat; f: GLfloat);
201 var i: Integer;
202 begin
203 i := Length(x);
204 SetLength(x, i + 1);
205 x[i] := f;
206 end;
208 procedure AddFloatX (var x: TArrayFloat; v: array of GLfloat); inline;
209 var i, j, vpx: Integer;
210 begin
211 i := Length(x);
212 vpx := Length(v);
213 if (cmds.mode = GL_QUADS) and (i div vpx mod 4 = 3) then
214 begin
215 for j := 0 to vpx - 1 do
216 AddFloatRaw(x, x[i - 3*vpx + j]);
217 for j := 0 to vpx - 1 do
218 AddFloatRaw(x, x[i - 1*vpx + j]);
219 end;
220 for j := 0 to vpx - 1 do
221 AddFloatRaw(x, v[j]);
222 end;
224 (* ---------- end internals ---------- *)
226 procedure glVertex2f(x, y: GLfloat);
227 begin
228 AddFloatX(cmds.v, [x, y]);
229 end;
231 procedure glVertex2i(x, y: GLint);
232 begin
233 AddFloatX(cmds.v, [x, y]);
234 end;
236 procedure glColor4f(red, green, blue, alpha: GLfloat);
237 begin
238 if cmds.mode = GL_INVALID_ENUM then
239 es_glColor4f(red, green, blue, alpha)
240 else
241 AddFloatX(cmds.c, [red, green, blue, alpha])
242 end;
244 procedure glColor4ub(red, green, blue, alpha: GLubyte);
245 begin
246 glColor4f(red / 255, green / 255, blue / 255, alpha / 255)
247 end;
249 procedure glColor3ub(red, green, blue: GLubyte);
250 begin
251 glColor4f(red / 255, green / 255, blue / 255, 255)
252 end;
254 procedure glTexCoord2f(s, t: GLfloat);
255 begin
256 AddFloatX(cmds.t, [s, t]);
257 end;
259 procedure glTexCoord2i(s, t: GLint);
260 begin
261 AddFloatX(cmds.t, [s, t]);
262 end;
270 procedure glReadPixels(x, y: GLint; width, height: GLsizei; format, atype: GLenum; pixels: Pointer);
271 begin
272 es_glReadPixels(x, y, width, height, format, atype, pixels);
273 end;
280 procedure glLoadIdentity;
281 begin
282 es_glLoadIdentity;
283 end;
285 procedure glMatrixMode(mode: GLenum);
286 begin
287 es_glMatrixMode(mode);
288 end;
290 procedure glLoadMatrixd(const m: PGLdouble);
291 var
292 i: Integer;
293 n: array [0..15] of GLfloat;
294 begin
295 for i := 0 to 15 do
296 n[i] := m[i];
297 es_glLoadMatrixf(@n[0]);
298 end;
300 procedure glPushMatrix;
301 begin
302 es_glPushMatrix;
303 end;
305 procedure glPopMatrix;
306 begin
307 es_glPopMatrix;
308 end;
310 procedure glTranslatef(x, y, z: GLfloat);
311 begin
312 es_glTranslatef(x, y, z);
313 end;
315 procedure glRotatef(angle, x, y, z: GLfloat);
316 begin
317 es_glRotatef(angle, x, y, z);
318 end;
320 procedure glScalef(x, y, z: GLfloat);
321 begin
322 es_glScalef(x, y, z);
323 end;
330 procedure glViewport(x, y: GLint; width, height: GLsizei);
331 begin
332 es_glViewport(x, y, width, height);
333 end;
335 procedure glScissor(x, y: GLint; width, height: GLsizei);
336 begin
337 es_glScissor(x, y, width, height);
338 end;
340 procedure glStencilMask(mask: GLuint);
341 begin
342 es_glStencilMask(mask);
343 end;
345 procedure glStencilFunc(func: GLenum; ref: GLint; mask: GLuint);
346 begin
347 es_glStencilFunc(func, ref, mask);
348 end;
350 procedure glStencilOp(fail, zfail, zpass: GLenum);
351 begin
352 es_glStencilOp(fail, zfail, zpass);
353 end;
355 procedure glColorMask(red, green, blue, alpha: GLboolean);
356 begin
357 es_glColorMask(red, green, blue, alpha);
358 end;
365 procedure glBindTexture(target: GLenum; texture: GLuint);
366 begin
367 es_glBindTexture(target, texture);
368 end;
370 procedure glGenTextures(n: GLsizei; textures: PGLuint);
371 begin
372 es_glGenTextures(n, textures);
373 end;
375 procedure glTexEnvi(target: GLenum; pname: GLenum; param: GLint);
376 begin
377 es_glTexEnvi(target, pname, param);
378 end;
380 procedure glTexParameterf(target: GLenum; pname: GLenum; param: GLfloat);
381 begin
382 es_glTexParameterf(target, pname, param);
383 end;
385 procedure glTexParameteri(target: GLenum; pname: GLenum; param: GLint);
386 begin
387 es_glTexParameteri(target, pname, param);
388 end;
390 procedure glTexImage2D(target: GLenum; level, internalformat: GLint; width, height: GLsizei; border: GLint; format, atype: GLenum; const pixels: Pointer);
391 begin
392 es_glTexImage2D(target, level, internalformat, width, height, border, format, atype, pixels);
393 end;
395 procedure glTexSubImage2D(target: GLenum; level, xoffset, yoffset: GLint; width, height: GLsizei; format, atype: GLenum; const pixels: Pointer);
396 begin
397 es_glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, atype, pixels);
398 end;
400 procedure glDeleteTextures(n: GLsizei; const textures: PGLuint);
401 begin
402 es_glDeleteTextures(n, textures);
403 end;
409 procedure nogl_Init;
410 begin
411 es_glVertexPointer := SDL_GL_GetProcAddress('glVertexPointer');
412 es_glColorPointer := SDL_GL_GetProcAddress('glColorPointer');
413 es_glTexCoordPointer := SDL_GL_GetProcAddress('glTexCoordPointer');
414 es_glEnableClientState := SDL_GL_GetProcAddress('glEnableClientState');
415 es_glDisableClientState := SDL_GL_GetProcAddress('glDisableClientState');
416 es_glDrawArrays := SDL_GL_GetProcAddress('glDrawArrays');
417 es_glActiveTexture := SDL_GL_GetProcAddress('glActiveTexture');
418 es_glClientActiveTexture := SDL_GL_GetProcAddress('glClientActiveTexture');
419 es_glColor4f := SDL_GL_GetProcAddress('glColor4f');
421 es_glEnable := SDL_GL_GetProcAddress('glEnable');
422 es_glDisable := SDL_GL_GetProcAddress('glDisable');
423 es_glIsEnabled := SDL_GL_GetProcAddress('glIsEnabled');
424 es_glGetString := SDL_GL_GetProcAddress('glGetString');
425 es_glClearColor := SDL_GL_GetProcAddress('glClearColor');
426 es_glClear := SDL_GL_GetProcAddress('glClear');
427 es_glAlphaFunc := SDL_GL_GetProcAddress('glAlphaFunc');
428 es_glBlendFunc := SDL_GL_GetProcAddress('glBlendFunc');
429 es_glPointSize := SDL_GL_GetProcAddress('glPointSize');
430 es_glLineWidth := SDL_GL_GetProcAddress('glLineWidth');
431 es_glGetIntegerv := SDL_GL_GetProcAddress('glGetIntegerv');
432 es_glFlush := SDL_GL_GetProcAddress('glFlush');
433 es_glFinish := SDL_GL_GetProcAddress('glFinish');
435 es_glLoadIdentity := SDL_GL_GetProcAddress('glLoadIdentity');
436 es_glMatrixMode := SDL_GL_GetProcAddress('glMatrixMode');
437 es_glLoadMatrixf := SDL_GL_GetProcAddress('glLoadMatrixf');
438 es_glPushMatrix := SDL_GL_GetProcAddress('glPushMatrix');
439 es_glPopMatrix := SDL_GL_GetProcAddress('glPopMatrix');
440 es_glTranslatef := SDL_GL_GetProcAddress('glTranslatef');
441 es_glRotatef := SDL_GL_GetProcAddress('glRotatef');
442 es_glScalef := SDL_GL_GetProcAddress('glScalef');
444 es_glReadPixels := SDL_GL_GetProcAddress('glReadPixels');
446 es_glViewport := SDL_GL_GetProcAddress('glViewport');
447 es_glScissor := SDL_GL_GetProcAddress('glScissor');
448 es_glStencilMask := SDL_GL_GetProcAddress('glStencilMask');
449 es_glStencilFunc := SDL_GL_GetProcAddress('glStencilFunc');
450 es_glStencilOp := SDL_GL_GetProcAddress('glStencilOp');
451 es_glColorMask := SDL_GL_GetProcAddress('glColorMask');
453 es_glBindTexture := SDL_GL_GetProcAddress('glBindTexture');
454 es_glGenTextures := SDL_GL_GetProcAddress('glGenTextures');
455 es_glTexEnvi := SDL_GL_GetProcAddress('glTexEnvi');
456 es_glTexParameterf := SDL_GL_GetProcAddress('glTexParameterf');
457 es_glTexParameteri := SDL_GL_GetProcAddress('glTexParameteri');
458 es_glTexImage2D := SDL_GL_GetProcAddress('glTexImage2D');
459 es_glTexSubImage2D := SDL_GL_GetProcAddress('glTexSubImage2D');
460 es_glDeleteTextures := SDL_GL_GetProcAddress('glDeleteTextures');
462 cmds.mode := GL_INVALID_ENUM
463 end;
465 procedure nogl_Quit;
466 begin
467 es_glVertexPointer := nil;
468 es_glColorPointer := nil;
469 es_glTexCoordPointer := nil;
470 es_glEnableClientState := nil;
471 es_glDisableClientState := nil;
472 es_glDrawArrays := nil;
473 es_glActiveTexture := nil;
474 es_glClientActiveTexture := nil;
475 es_glColor4f := nil;
477 es_glEnable := nil;
478 es_glDisable := nil;
479 es_glIsEnabled := nil;
480 es_glGetString := nil;
481 es_glClearColor := nil;
482 es_glClear := nil;
483 es_glAlphaFunc := nil;
484 es_glBlendFunc := nil;
485 es_glPointSize := nil;
486 es_glLineWidth := nil;
487 es_glGetIntegerv := nil;
488 es_glFlush := nil;
489 es_glFinish := nil;
491 es_glLoadIdentity := nil;
492 es_glMatrixMode := nil;
493 es_glLoadMatrixf := nil;
494 es_glPushMatrix := nil;
495 es_glPopMatrix := nil;
496 es_glTranslatef := nil;
497 es_glRotatef := nil;
498 es_glScalef := nil;
500 es_glReadPixels := nil;
502 es_glViewport := nil;
503 es_glScissor := nil;
504 es_glStencilMask := nil;
505 es_glStencilFunc := nil;
506 es_glStencilOp := nil;
507 es_glColorMask := nil;
509 es_glBindTexture := nil;
510 es_glGenTextures := nil;
511 es_glTexEnvi := nil;
512 es_glTexParameterf := nil;
513 es_glTexParameteri := nil;
514 es_glTexImage2D := nil;
515 es_glTexSubImage2D := nil;
516 es_glDeleteTextures := nil;
517 end;
519 initialization