blob: f8857f165d8e8f5ff594262b19b468dc7bd9ed8b [file] [log] [blame]
keunyoungb85b2752013-03-08 12:28:03 -08001/*
2* Copyright (C) 2011 The Android Open Source Project
3*
4* Licensed under the Apache License, Version 2.0 (the "License");
5* you may not use this file except in compliance with the License.
6* You may obtain a copy of the License at
7*
8* http://www.apache.org/licenses/LICENSE-2.0
9*
10* Unless required by applicable law or agreed to in writing, software
11* distributed under the License is distributed on an "AS IS" BASIS,
12* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13* See the License for the specific language governing permissions and
14* limitations under the License.
15*/
16#ifndef __GL_UTILS_H__
17#define __GL_UTILS_H__
18
19#include <stdio.h>
20#include <stdlib.h>
21
22#ifdef GL_API
23 #undef GL_API
24#endif
25#define GL_API
26
27#ifdef GL_APIENTRY
28 #undef GL_APIENTRY
29#endif
30
31#ifdef GL_APIENTRYP
32 #undef GL_APIENTRYP
33#endif
34#define GL_APIENTRYP
35
36#ifndef ANDROID
37#define GL_APIENTRY
38#endif
39
40#include <GLES/gl.h>
41#include <GLES/glext.h>
42#include <GLES2/gl2.h>
43#include <GLES2/gl2ext.h>
44
45#ifdef __cplusplus
46extern "C" {
47#endif
48
49 size_t glSizeof(GLenum type);
50 size_t glUtilsParamSize(GLenum param);
51 void glUtilsPackPointerData(unsigned char *dst, unsigned char *str,
52 int size, GLenum type, unsigned int stride,
53 unsigned int datalen);
54 void glUtilsWritePackPointerData(void* stream, unsigned char *src,
55 int size, GLenum type, unsigned int stride,
56 unsigned int datalen);
57 int glUtilsPixelBitSize(GLenum format, GLenum type);
58 void glUtilsPackStrings(char *ptr, char **strings, GLint *length, GLsizei count);
59 int glUtilsCalcShaderSourceLen(char **strings, GLint *length, GLsizei count);
60#ifdef __cplusplus
61};
62#endif
63
64namespace GLUtils {
65
66 template <class T> void minmax(T *indices, int count, int *min, int *max) {
67 *min = -1;
68 *max = -1;
69 T *ptr = indices;
70 for (int i = 0; i < count; i++) {
71 if (*min == -1 || *ptr < *min) *min = *ptr;
72 if (*max == -1 || *ptr > *max) *max = *ptr;
73 ptr++;
74 }
75 }
76
77 template <class T> void shiftIndices(T *indices, int count, int offset) {
78 T *ptr = indices;
79 for (int i = 0; i < count; i++) {
80 *ptr += offset;
81 ptr++;
82 }
83 }
84
85
86 template <class T> void shiftIndices(T *src, T *dst, int count, int offset)
87 {
88 for (int i = 0; i < count; i++) {
89 *dst = *src + offset;
90 dst++;
91 src++;
92 }
93 }
94}; // namespace GLUtils
95#endif