pTitSeb's glshim renamed to gl4es
This commit is contained in:
8
project/jni/gl4es/spec/template/base/base.j2
Executable file
8
project/jni/gl4es/spec/template/base/base.j2
Executable file
@@ -0,0 +1,8 @@
|
||||
{% if ifdef %}#ifdef {{ ifdef }}
|
||||
{% endif %}
|
||||
{% if ifndef %}#ifndef {{ ifndef }}
|
||||
{% endif %}
|
||||
{% block main %}{% endblock %}
|
||||
{% block content %}{% endblock %}
|
||||
{% if ifdef %}#endif{% endif %}
|
||||
{% if ifndef %}#endif{% endif %}
|
||||
5
project/jni/gl4es/spec/template/base/fprint.j2
Normal file
5
project/jni/gl4es/spec/template/base/fprint.j2
Normal file
@@ -0,0 +1,5 @@
|
||||
{% if func.args %}
|
||||
printf("{{ func.name }}({{ func.args|printf }});\n", {{ func.args|args(0) }});
|
||||
{% else %}
|
||||
printf("{{ func.name }}();\n");
|
||||
{% endif %}
|
||||
10
project/jni/gl4es/spec/template/base/header.j2
Normal file
10
project/jni/gl4es/spec/template/base/header.j2
Normal file
@@ -0,0 +1,10 @@
|
||||
{% extends "base/base.j2" %}
|
||||
{% block main %}
|
||||
{% include "base/headers.j2" %}
|
||||
|
||||
{% set guard = name.upper().replace('.', '_') -%}
|
||||
#ifndef {{ guard }}
|
||||
#define {{ guard }}
|
||||
{% block content %}{% endblock %}
|
||||
#endif
|
||||
{% endblock %}
|
||||
9
project/jni/gl4es/spec/template/base/headers.j2
Executable file
9
project/jni/gl4es/spec/template/base/headers.j2
Executable file
@@ -0,0 +1,9 @@
|
||||
{% block headers %}
|
||||
{% for header in headers %}
|
||||
{% if "<" in header %}
|
||||
#include {{ header }}
|
||||
{% else %}
|
||||
#include "{{ header }}"
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endblock %}
|
||||
22
project/jni/gl4es/spec/template/base/indexed_call.j2
Normal file
22
project/jni/gl4es/spec/template/base/indexed_call.j2
Normal file
@@ -0,0 +1,22 @@
|
||||
void glIndexedCall(const indexed_call_t *packed, void *ret_v) {
|
||||
switch (packed->func) {
|
||||
{% for f in functions %}
|
||||
#ifndef skip_index_{{ f.name }}
|
||||
case {{ f.name }}_INDEX: {
|
||||
INDEXED_{{ f.types }} *unpacked = (INDEXED_{{ f.types }} *)packed;
|
||||
{% if f.args %}
|
||||
ARGS_{{ f.types }} args = unpacked->args;
|
||||
{% endif %}
|
||||
{% if not f.void %}
|
||||
{{ f.return }} *ret = ({{ f.return }} *)ret_v;
|
||||
*ret =
|
||||
{% endif %}
|
||||
{{ f.name }}({% for arg in f.args -%}
|
||||
args.a{{ loop.index }}{% if not arg.last %}, {% endif %}
|
||||
{% endfor %});
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
{% endfor %}
|
||||
}
|
||||
}
|
||||
16
project/jni/gl4es/spec/template/base/packed_call.j2
Normal file
16
project/jni/gl4es/spec/template/base/packed_call.j2
Normal file
@@ -0,0 +1,16 @@
|
||||
void glPackedCall(const packed_call_t *packed) {
|
||||
switch (packed->format) {
|
||||
{% for f in formats %}
|
||||
case FORMAT_{{ f.types }}: {
|
||||
PACKED_{{ f.types }} *unpacked = (PACKED_{{ f.types }} *)packed;
|
||||
{% if f.args %}
|
||||
ARGS_{{ f.types }} args = unpacked->args;
|
||||
{% endif %}
|
||||
unpacked->func({% for arg in f.args -%}
|
||||
args.a{{ loop.index }}{% if not arg.last %}, {% endif %}
|
||||
{% endfor %});
|
||||
break;
|
||||
}
|
||||
{% endfor %}
|
||||
}
|
||||
}
|
||||
15
project/jni/gl4es/spec/template/base/wrap.c.j2
Executable file
15
project/jni/gl4es/spec/template/base/wrap.c.j2
Executable file
@@ -0,0 +1,15 @@
|
||||
{% extends "base/base.j2" %}
|
||||
{% block main %}
|
||||
{% include "base/headers.j2" %}
|
||||
{% for func in functions %}
|
||||
{% block definition scoped %}
|
||||
{{ func.return }} glshim_{{ func.name }}({{ func.args|args }}) {
|
||||
{% block load scoped %}{% endblock %}
|
||||
{% block call scoped %}
|
||||
{% if not func.void %}return {% endif %}{% block prefix %}wrap{% endblock %}_{{ func.name }}({{ func.args|args(0) }});
|
||||
{%- endblock %}
|
||||
}
|
||||
{{ func.return }} {{ func.name }}({{ func.args|args }}) __attribute__((alias("glshim_{{ func.name }}"))) __attribute__((visibility("default")));
|
||||
{% endblock %}
|
||||
{% endfor %}
|
||||
{% endblock %}
|
||||
64
project/jni/gl4es/spec/template/base/wrap.h.j2
Executable file
64
project/jni/gl4es/spec/template/base/wrap.h.j2
Executable file
@@ -0,0 +1,64 @@
|
||||
{% extends "base/header.j2" %}
|
||||
{% block content %}
|
||||
|
||||
typedef struct {
|
||||
int format;
|
||||
void *func;
|
||||
void *args;
|
||||
} packed_call_t;
|
||||
|
||||
typedef struct {
|
||||
int func;
|
||||
void *args;
|
||||
} indexed_call_t;
|
||||
|
||||
enum FORMAT {
|
||||
{% for f in formats %}
|
||||
FORMAT_{{ f.types }},
|
||||
{% endfor %}
|
||||
};
|
||||
|
||||
{% for f in formats %}
|
||||
typedef {{ f.return }} (*FUNC_{{ f.types }})({{ f.args|args }});
|
||||
{% if f.args %}
|
||||
typedef struct {
|
||||
{% for arg in f.args %}
|
||||
{{ arg.type|unconst }} a{{ loop.index }}{% if arg.type == 'GLdouble' %} __attribute__ ((aligned(8))){% endif %};
|
||||
{% endfor %}
|
||||
} ARGS_{{ f.types }};
|
||||
{% endif %}
|
||||
typedef struct {
|
||||
int format;
|
||||
FUNC_{{ f.types }} func;
|
||||
{% if f.args %}
|
||||
ARGS_{{ f.types }} args;
|
||||
{% endif %}
|
||||
} PACKED_{{ f.types }};
|
||||
typedef struct {
|
||||
int func;
|
||||
{% if f.args %}
|
||||
ARGS_{{ f.types }} args;
|
||||
{% endif %}
|
||||
} INDEXED_{{ f.types }};
|
||||
{% endfor %}
|
||||
|
||||
extern void glPushCall(void *data);
|
||||
void glPackedCall(const packed_call_t *packed);
|
||||
void glIndexedCall(const indexed_call_t *packed, void *ret_v);
|
||||
|
||||
{% for func in functions %}
|
||||
#define {{ func.name }}_INDEX {{ loop.index }}
|
||||
#define {{ func.name }}_RETURN {{ func.return }}
|
||||
#define {{ func.name }}_ARG_NAMES {{ func.args|args(0) }}
|
||||
#define {{ func.name }}_ARG_EXPAND {{ func.args|args }}
|
||||
#define {{ func.name }}_PACKED PACKED_{{ func.types }}
|
||||
#define {{ func.name }}_INDEXED INDEXED_{{ func.types }}
|
||||
#define {{ func.name }}_FORMAT FORMAT_{{ func.types }}
|
||||
{% endfor %}
|
||||
|
||||
{% for func in functions %}
|
||||
{{ func.return }} glshim_{{ func.name }}({{ func.name }}_ARG_EXPAND);
|
||||
typedef {{ func.return }} (*{{ func.name }}_PTR)({{ func.name }}_ARG_EXPAND);
|
||||
{% endfor %}
|
||||
|
||||
{% endblock %}
|
||||
52
project/jni/gl4es/spec/template/client.c.j2
Normal file
52
project/jni/gl4es/spec/template/client.c.j2
Normal file
@@ -0,0 +1,52 @@
|
||||
{% extends "base/wrap.c.j2" %}
|
||||
{% block headers %}
|
||||
#include <sys/syscall.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
{{ super() }}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block main %}
|
||||
{{ super() }}
|
||||
|
||||
snd_config_t *snd_config = NULL;
|
||||
|
||||
__GLXextFuncPtr glXGetProcAddressARB(const GLubyte *name) {
|
||||
{% for func in functions %}
|
||||
{% if not func.name.startswith('snd_') %}
|
||||
if (strcmp(name, "{{ func.name }}") == 0) {
|
||||
return (void *){{ func.name }};
|
||||
}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
printf("glXGetProcAddress(%s) not found\n", name);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
__GLXextFuncPtr glXGetProcAddress(const GLubyte *name) {
|
||||
return glXGetProcAddressARB(name);
|
||||
}
|
||||
{% endblock %}
|
||||
|
||||
{% block definition %}
|
||||
#if !defined(skip_client_{{ func.name }}) && !defined(skip_index_{{ func.name }})
|
||||
{{ super() -}}
|
||||
#endif
|
||||
{% endblock %}
|
||||
|
||||
{% block call %}
|
||||
{{ func.name }}_INDEXED packed_data;
|
||||
packed_data.func = {{ func.name }}_INDEX;
|
||||
{% for arg in func.args %}
|
||||
packed_data.args.a{{ loop.index }} = ({{ arg.type|unconst }}){{ arg.name }};
|
||||
{% endfor %}
|
||||
{% if not func.void %}
|
||||
{{ func.return }} ret;
|
||||
syscall(SYS_proxy, (void *)&packed_data, &ret);
|
||||
return ret;
|
||||
{% else %}
|
||||
syscall(SYS_proxy, (void *)&packed_data, NULL);
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
23
project/jni/gl4es/spec/template/eglwrap.c.j2
Normal file
23
project/jni/gl4es/spec/template/eglwrap.c.j2
Normal file
@@ -0,0 +1,23 @@
|
||||
{% extends "base/wrap.c.j2" %}
|
||||
{% block headers %}
|
||||
{{ super() }}
|
||||
void *egl_lib;
|
||||
#define WARN_NULL(name) if (name == NULL) printf("libGL: warning, " #name " is NULL\n");
|
||||
#define LOAD_EGL(type, name, args...) \
|
||||
typedef type (*eglptr_##name)(args); \
|
||||
static eglptr_##name egl_##name; \
|
||||
if (egl##name == NULL) { \
|
||||
if (egl_lib == NULL) { \
|
||||
egl_lib = dlopen("libEGL.so", RTLD_LOCAL | RTLD_LAZY); \
|
||||
WARN_NULL(egl_lib); \
|
||||
} \
|
||||
egl_##name = (eglptr_##name)dlsym(egl_lib, #name); \
|
||||
WARN_NULL(egl_lib_##name); \
|
||||
} \
|
||||
{% endblock %}
|
||||
|
||||
{% block load %}
|
||||
LOAD_EGL({{ func.return }}, {{ func.name }}
|
||||
{%- if func.args %}, {{ func.args|args }}{% endif %});
|
||||
{% endblock %}
|
||||
{% block prefix %}egl{% endblock %}
|
||||
25
project/jni/gl4es/spec/template/gleswrap.c.j2
Executable file
25
project/jni/gl4es/spec/template/gleswrap.c.j2
Executable file
@@ -0,0 +1,25 @@
|
||||
{% extends "base/wrap.c.j2" %}
|
||||
{% block headers %}
|
||||
{{ super() }}
|
||||
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
{% include "base/packed_call.j2" %}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block definition %}
|
||||
#ifndef skip_{{ func.name }}
|
||||
{{ super() -}}
|
||||
#endif
|
||||
{% endblock %}
|
||||
{% block load %}
|
||||
LOAD_GLES({{ func.name }});
|
||||
{% endblock %}
|
||||
{% block call %}
|
||||
#ifndef direct_{{ func.name }}
|
||||
PUSH_IF_COMPILING({{ func.name }})
|
||||
#endif
|
||||
{{ super() }}
|
||||
{% endblock %}
|
||||
{% block prefix %}gles{% endblock %}
|
||||
20
project/jni/gl4es/spec/template/glextwrap.c.j2
Executable file
20
project/jni/gl4es/spec/template/glextwrap.c.j2
Executable file
@@ -0,0 +1,20 @@
|
||||
{% extends "base/wrap.c.j2" %}
|
||||
{% block headers %}
|
||||
{{ super() }}
|
||||
|
||||
{% endblock %}
|
||||
{% block definition %}
|
||||
#ifndef skip_{{ func.name }}
|
||||
{{ super() -}}
|
||||
#endif
|
||||
{% endblock %}
|
||||
{% block load %}
|
||||
LOAD_GLES_OES({{ func.name }});
|
||||
{% endblock %}
|
||||
{% block call %}
|
||||
#ifndef direct_{{ func.name }}
|
||||
PUSH_IF_COMPILING({{ func.name }})
|
||||
#endif
|
||||
{{ super() }}
|
||||
{% endblock %}
|
||||
{% block prefix %}gles{% endblock %}
|
||||
20
project/jni/gl4es/spec/template/glwrap.h.j2
Executable file
20
project/jni/gl4es/spec/template/glwrap.h.j2
Executable file
@@ -0,0 +1,20 @@
|
||||
{% extends "base/wrap.h.j2" %}
|
||||
{% block content %}
|
||||
{{ super() }}
|
||||
|
||||
{% for func in functions %}
|
||||
#ifndef direct_{{ func.name }}
|
||||
#define push_{{ func.name }}({{ func.args|args(0) }}) { \
|
||||
{{ func.name }}_PACKED *packed_data = malloc(sizeof({{ func.name }}_PACKED)); \
|
||||
packed_data->format = {{ func.name }}_FORMAT; \
|
||||
packed_data->func = glshim_{{ func.name }}; \
|
||||
{% if func.args %}
|
||||
{% for arg in func.args %}
|
||||
packed_data->args.a{{ loop.index }} = ({{ arg.type|unconst }}){{ arg.name }}; \
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
glPushCall((void *)packed_data); \
|
||||
}
|
||||
#endif
|
||||
{% endfor %}
|
||||
{% endblock %}
|
||||
3
project/jni/gl4es/spec/template/glxfuncs.j2
Executable file
3
project/jni/gl4es/spec/template/glxfuncs.j2
Executable file
@@ -0,0 +1,3 @@
|
||||
{% for func in functions %}
|
||||
_EX({{ func.name }});
|
||||
{% endfor %}
|
||||
6
project/jni/gl4es/spec/template/host.c.j2
Normal file
6
project/jni/gl4es/spec/template/host.c.j2
Normal file
@@ -0,0 +1,6 @@
|
||||
{% extends "base/header.j2" %}
|
||||
|
||||
{% block content %}
|
||||
{% include "base/indexed_call.j2" %}
|
||||
|
||||
{% endblock %}
|
||||
1
project/jni/gl4es/spec/template/proxy.h.j2
Normal file
1
project/jni/gl4es/spec/template/proxy.h.j2
Normal file
@@ -0,0 +1 @@
|
||||
{% extends "base/wrap.h.j2" %}
|
||||
Reference in New Issue
Block a user