summaryrefslogtreecommitdiff
path: root/GLESv1_CM/yagl_gles1_context.c
diff options
context:
space:
mode:
Diffstat (limited to 'GLESv1_CM/yagl_gles1_context.c')
-rw-r--r--GLESv1_CM/yagl_gles1_context.c114
1 files changed, 61 insertions, 53 deletions
diff --git a/GLESv1_CM/yagl_gles1_context.c b/GLESv1_CM/yagl_gles1_context.c
index f7681bc..d1dab84 100644
--- a/GLESv1_CM/yagl_gles1_context.c
+++ b/GLESv1_CM/yagl_gles1_context.c
@@ -1,6 +1,7 @@
#include "GLES/gl.h"
#include "GLES/glext.h"
#include "yagl_gles1_context.h"
+#include "yagl_gles_vertex_array.h"
#include "yagl_gles_array.h"
#include "yagl_gles_buffer.h"
#include "yagl_gles_texture.h"
@@ -174,11 +175,9 @@ static unsigned yagl_gles1_array_idx_from_pname(struct yagl_gles1_context *ctx,
static void yagl_gles1_context_prepare(struct yagl_client_context *ctx)
{
struct yagl_gles1_context *gles1_ctx = (struct yagl_gles1_context*)ctx;
- GLint i, num_texture_units = 0;
- struct yagl_gles_array *arrays;
+ GLint num_texture_units = 0;
int32_t size = 0;
char *extensions;
- int num_arrays;
YAGL_LOG_FUNC_ENTER(yagl_gles1_context_prepare, "%p", ctx);
@@ -192,40 +191,10 @@ static void yagl_gles1_context_prepare(struct yagl_client_context *ctx)
num_texture_units = 32;
}
- /* Each texture unit has its own client-side array state */
- num_arrays = yagl_gles1_array_texcoord + num_texture_units;
-
- arrays = yagl_malloc(num_arrays * sizeof(*arrays));
-
- yagl_gles_array_init(&arrays[yagl_gles1_array_vertex],
- yagl_gles1_array_vertex,
- &yagl_gles1_vertex_array_apply,
- gles1_ctx);
-
- yagl_gles_array_init(&arrays[yagl_gles1_array_color],
- yagl_gles1_array_color,
- &yagl_gles1_color_array_apply,
- gles1_ctx);
-
- yagl_gles_array_init(&arrays[yagl_gles1_array_normal],
- yagl_gles1_array_normal,
- &yagl_gles1_normal_array_apply,
- gles1_ctx);
-
- yagl_gles_array_init(&arrays[yagl_gles1_array_pointsize],
- yagl_gles1_array_pointsize,
- &yagl_gles1_pointsize_array_apply,
- gles1_ctx);
-
- for (i = yagl_gles1_array_texcoord; i < num_arrays; ++i) {
- yagl_gles_array_init(&arrays[i],
- i,
- &yagl_gles1_texcoord_array_apply,
- gles1_ctx);
- }
-
- yagl_gles_context_prepare(&gles1_ctx->base, arrays, num_arrays,
- num_texture_units);
+ yagl_gles_context_prepare(&gles1_ctx->base,
+ num_texture_units,
+ /* Each texture unit has its own client-side array state */
+ yagl_gles1_array_texcoord + num_texture_units);
yagl_host_glGetIntegerv(GL_MAX_CLIP_PLANES,
&gles1_ctx->max_clip_planes,
@@ -271,6 +240,44 @@ static void yagl_gles1_context_destroy(struct yagl_client_context *ctx)
YAGL_LOG_FUNC_EXIT(NULL);
}
+static struct yagl_gles_array
+ *yagl_gles1_context_create_arrays(struct yagl_gles_context *ctx)
+{
+ GLint i;
+ struct yagl_gles_array *arrays;
+
+ arrays = yagl_malloc(ctx->num_arrays * sizeof(*arrays));
+
+ yagl_gles_array_init(&arrays[yagl_gles1_array_vertex],
+ yagl_gles1_array_vertex,
+ &yagl_gles1_vertex_array_apply,
+ ctx);
+
+ yagl_gles_array_init(&arrays[yagl_gles1_array_color],
+ yagl_gles1_array_color,
+ &yagl_gles1_color_array_apply,
+ ctx);
+
+ yagl_gles_array_init(&arrays[yagl_gles1_array_normal],
+ yagl_gles1_array_normal,
+ &yagl_gles1_normal_array_apply,
+ ctx);
+
+ yagl_gles_array_init(&arrays[yagl_gles1_array_pointsize],
+ yagl_gles1_array_pointsize,
+ &yagl_gles1_pointsize_array_apply,
+ ctx);
+
+ for (i = yagl_gles1_array_texcoord; i < ctx->num_arrays; ++i) {
+ yagl_gles_array_init(&arrays[i],
+ i,
+ &yagl_gles1_texcoord_array_apply,
+ ctx);
+ }
+
+ return arrays;
+}
+
static const GLchar
*yagl_gles1_context_get_string(struct yagl_gles_context *ctx,
GLenum name)
@@ -703,7 +710,7 @@ static int yagl_gles1_context_is_enabled(struct yagl_gles_context *ctx,
case GL_COLOR_ARRAY:
case GL_TEXTURE_COORD_ARRAY:
case GL_POINT_SIZE_ARRAY_OES:
- *enabled = ctx->arrays[yagl_gles1_array_idx_from_pname(gles1_ctx, cap)].enabled;
+ *enabled = ctx->vao->arrays[yagl_gles1_array_idx_from_pname(gles1_ctx, cap)].enabled;
return 1;
case GL_ALPHA_TEST:
case GL_COLOR_LOGIC_OP:
@@ -767,7 +774,7 @@ static int yagl_gles1_context_get_integerv(struct yagl_gles_context *ctx,
case GL_COLOR_ARRAY:
case GL_TEXTURE_COORD_ARRAY:
case GL_POINT_SIZE_ARRAY_OES:
- *params = ctx->arrays[yagl_gles1_array_idx_from_pname(gles1_ctx, pname)].enabled;
+ *params = ctx->vao->arrays[yagl_gles1_array_idx_from_pname(gles1_ctx, pname)].enabled;
*num_params = 1;
break;
case GL_VERTEX_ARRAY_BUFFER_BINDING:
@@ -775,8 +782,8 @@ static int yagl_gles1_context_get_integerv(struct yagl_gles_context *ctx,
case GL_NORMAL_ARRAY_BUFFER_BINDING:
case GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING:
case GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES:
- *params = ctx->arrays[yagl_gles1_array_idx_from_pname(gles1_ctx, pname)].vbo ?
- ctx->arrays[yagl_gles1_array_idx_from_pname(gles1_ctx, pname)].vbo->base.local_name
+ *params = ctx->vao->arrays[yagl_gles1_array_idx_from_pname(gles1_ctx, pname)].vbo ?
+ ctx->vao->arrays[yagl_gles1_array_idx_from_pname(gles1_ctx, pname)].vbo->base.local_name
: 0;
*num_params = 1;
break;
@@ -785,7 +792,7 @@ static int yagl_gles1_context_get_integerv(struct yagl_gles_context *ctx,
case GL_NORMAL_ARRAY_STRIDE:
case GL_TEXTURE_COORD_ARRAY_STRIDE:
case GL_POINT_SIZE_ARRAY_STRIDE_OES:
- *params = ctx->arrays[yagl_gles1_array_idx_from_pname(gles1_ctx, pname)].stride;
+ *params = ctx->vao->arrays[yagl_gles1_array_idx_from_pname(gles1_ctx, pname)].stride;
*num_params = 1;
break;
case GL_VERTEX_ARRAY_TYPE:
@@ -793,13 +800,13 @@ static int yagl_gles1_context_get_integerv(struct yagl_gles_context *ctx,
case GL_NORMAL_ARRAY_TYPE:
case GL_TEXTURE_COORD_ARRAY_TYPE:
case GL_POINT_SIZE_ARRAY_TYPE_OES:
- *params = ctx->arrays[yagl_gles1_array_idx_from_pname(gles1_ctx, pname)].type;
+ *params = ctx->vao->arrays[yagl_gles1_array_idx_from_pname(gles1_ctx, pname)].type;
*num_params = 1;
break;
case GL_VERTEX_ARRAY_SIZE:
case GL_COLOR_ARRAY_SIZE:
case GL_TEXTURE_COORD_ARRAY_SIZE:
- *params = ctx->arrays[yagl_gles1_array_idx_from_pname(gles1_ctx, pname)].size;
+ *params = ctx->vao->arrays[yagl_gles1_array_idx_from_pname(gles1_ctx, pname)].size;
*num_params = 1;
break;
default:
@@ -1042,7 +1049,7 @@ static void yagl_gles1_draw_arrays_psize(struct yagl_gles_context *ctx,
GLint first,
GLsizei count)
{
- struct yagl_gles_array *parray = &ctx->arrays[yagl_gles1_array_pointsize];
+ struct yagl_gles_array *parray = &ctx->vao->arrays[yagl_gles1_array_pointsize];
unsigned i = 0;
unsigned stride = parray->stride;
GLsizei points_cnt;
@@ -1109,7 +1116,7 @@ static void yagl_gles1_draw_elem_psize(struct yagl_gles_context *ctx,
const GLvoid *indices,
int32_t indices_count)
{
- struct yagl_gles_array *parray = &ctx->arrays[yagl_gles1_array_pointsize];
+ struct yagl_gles_array *parray = &ctx->vao->arrays[yagl_gles1_array_pointsize];
unsigned i = 0, el_size;
GLsizei points_cnt;
GLint arr_offset;
@@ -1130,7 +1137,7 @@ static void yagl_gles1_draw_elem_psize(struct yagl_gles_context *ctx,
assert(el_size > 0);
- next_psize_p = yagl_get_next_psize_p(ctx->ebo, parray, type, i, indices, indices_count);
+ next_psize_p = yagl_get_next_psize_p(ctx->vao->ebo, parray, type, i, indices, indices_count);
while (i < count) {
points_cnt = 0;
@@ -1140,7 +1147,7 @@ static void yagl_gles1_draw_elem_psize(struct yagl_gles_context *ctx,
do {
++points_cnt;
++i;
- next_psize_p = yagl_get_next_psize_p(ctx->ebo,
+ next_psize_p = yagl_get_next_psize_p(ctx->vao->ebo,
parray,
type,
i,
@@ -1150,7 +1157,7 @@ static void yagl_gles1_draw_elem_psize(struct yagl_gles_context *ctx,
yagl_host_glPointSize(cur_psize);
- if (ctx->ebo) {
+ if (ctx->vao->ebo) {
yagl_host_glDrawElements(GL_POINTS,
points_cnt,
type,
@@ -1171,11 +1178,11 @@ static void yagl_gles1_context_draw_arrays(struct yagl_gles_context *ctx,
GLint first,
GLsizei count)
{
- if (!ctx->arrays[yagl_gles1_array_vertex].enabled) {
+ if (!ctx->vao->arrays[yagl_gles1_array_vertex].enabled) {
return;
}
- if ((mode == GL_POINTS) && ctx->arrays[yagl_gles1_array_pointsize].enabled) {
+ if ((mode == GL_POINTS) && ctx->vao->arrays[yagl_gles1_array_pointsize].enabled) {
yagl_gles1_draw_arrays_psize(ctx, first, count);
} else {
yagl_host_glDrawArrays(mode, first, count);
@@ -1189,11 +1196,11 @@ static void yagl_gles1_context_draw_elements(struct yagl_gles_context *ctx,
const GLvoid *indices,
int32_t indices_count)
{
- if (!ctx->arrays[yagl_gles1_array_vertex].enabled) {
+ if (!ctx->vao->arrays[yagl_gles1_array_vertex].enabled) {
return;
}
- if ((mode == GL_POINTS) && ctx->arrays[yagl_gles1_array_pointsize].enabled) {
+ if ((mode == GL_POINTS) && ctx->vao->arrays[yagl_gles1_array_pointsize].enabled) {
yagl_gles1_draw_elem_psize(ctx, count, type, indices, indices_count);
} else {
yagl_host_glDrawElements(mode, count, type, indices, indices_count);
@@ -1214,6 +1221,7 @@ struct yagl_client_context *yagl_gles1_context_create(struct yagl_sharegroup *sg
gles1_ctx->base.base.prepare = &yagl_gles1_context_prepare;
gles1_ctx->base.base.destroy = &yagl_gles1_context_destroy;
+ gles1_ctx->base.create_arrays = &yagl_gles1_context_create_arrays;
gles1_ctx->base.get_string = &yagl_gles1_context_get_string;
gles1_ctx->base.get_extensions = &yagl_gles1_context_get_extensions;
gles1_ctx->base.compressed_tex_image = &yagl_gles1_context_compressed_tex_image;