1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
//
// Book: OpenGL(R) ES 2.0 Programming Guide
// Authors: Aaftab Munshi, Dan Ginsburg, Dave Shreiner
// ISBN-10: 0321502795
// ISBN-13: 9780321502797
// Publisher: Addison-Wesley Professional
// URLs: http://safari.informit.com/9780321563835
// http://www.opengles-book.com
//
// ESUtil.c
//
// A utility library for OpenGL ES. This library provides a
// basic common framework for the example applications in the
// OpenGL ES 2.0 Programming Guide.
//
///
// Includes
//
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
#include <sys/time.h>
#include "esUtil.h"
///
// esLogMessage()
//
// Log an error message to the debug output for the platform
//
void ESUTIL_API esLogMessage ( const char *formatStr, ... )
{
va_list params;
char buf[BUFSIZ];
va_start ( params, formatStr );
vsprintf ( buf, formatStr, params );
printf ( "%s", buf );
va_end ( params );
}
///
// esLoadTGA()
//
// Loads a 24-bit TGA image from a file. This is probably the simplest TGA loader ever.
// Does not support loading of compressed TGAs nor TGAa with alpha channel. But for the
// sake of the examples, this is sufficient.
//
char* ESUTIL_API esLoadTGA ( char *fileName, int *width, int *height )
{
char *buffer = NULL;
FILE *f;
unsigned char tgaheader[12];
unsigned char attributes[6];
unsigned int imagesize;
f = fopen(fileName, "rb");
if(f == NULL) return NULL;
if(fread(&tgaheader, sizeof(tgaheader), 1, f) == 0)
{
fclose(f);
return NULL;
}
if(fread(attributes, sizeof(attributes), 1, f) == 0)
{
fclose(f);
return 0;
}
*width = attributes[1] * 256 + attributes[0];
*height = attributes[3] * 256 + attributes[2];
imagesize = attributes[4] / 8 * *width * *height;
buffer = malloc(imagesize);
if (buffer == NULL)
{
fclose(f);
return 0;
}
if(fread(buffer, 1, imagesize, f) != imagesize)
{
free(buffer);
return NULL;
}
fclose(f);
return buffer;
}
double esNow(void)
{
struct timeval tv;
#ifdef __VMS
(void) gettimeofday(&tv, NULL );
#else
(void) gettimeofday(&tv, NULL);
#endif
return tv.tv_sec * 1.0 + tv.tv_usec / 1000000.0;
}
|