New upstream version 21.0.2+dfsg1
This commit is contained in:
parent
1f1bbb3518
commit
baafb6325b
706 changed files with 49633 additions and 5044 deletions
|
|
@ -73,12 +73,14 @@ static NSOpenGLContext *gl_context_create(void)
|
|||
struct gl_platform *gl_platform_create(gs_device_t *device, uint32_t adapter)
|
||||
{
|
||||
struct gl_platform *plat = bzalloc(sizeof(struct gl_platform));
|
||||
GLint interval = 0;
|
||||
|
||||
plat->context = gl_context_create();
|
||||
if (!plat->context)
|
||||
goto fail;
|
||||
|
||||
[plat->context makeCurrentContext];
|
||||
[plat->context setValues:&interval forParameter:NSOpenGLCPSwapInterval];
|
||||
|
||||
if (!gladLoadGL())
|
||||
goto fail;
|
||||
|
|
|
|||
|
|
@ -148,7 +148,7 @@ bool gl_create_buffer(GLenum target, GLuint *buffer, GLsizeiptr size,
|
|||
return success;
|
||||
}
|
||||
|
||||
bool update_buffer(GLenum target, GLuint buffer, void *data, size_t size)
|
||||
bool update_buffer(GLenum target, GLuint buffer, const void *data, size_t size)
|
||||
{
|
||||
void *ptr;
|
||||
bool success = true;
|
||||
|
|
|
|||
|
|
@ -157,5 +157,5 @@ extern bool gl_copy_texture(struct gs_device *device,
|
|||
extern bool gl_create_buffer(GLenum target, GLuint *buffer, GLsizeiptr size,
|
||||
const GLvoid *data, GLenum usage);
|
||||
|
||||
extern bool update_buffer(GLenum target, GLuint buffer, void *data,
|
||||
extern bool update_buffer(GLenum target, GLuint buffer, const void *data,
|
||||
size_t size);
|
||||
|
|
|
|||
|
|
@ -70,15 +70,15 @@ void gs_indexbuffer_destroy(gs_indexbuffer_t *ib)
|
|||
}
|
||||
}
|
||||
|
||||
void gs_indexbuffer_flush(gs_indexbuffer_t *ib)
|
||||
static inline void gs_indexbuffer_flush_internal(gs_indexbuffer_t *ib,
|
||||
const void *data)
|
||||
{
|
||||
if (!ib->dynamic) {
|
||||
blog(LOG_ERROR, "Index buffer is not dynamic");
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (!update_buffer(GL_ELEMENT_ARRAY_BUFFER, ib->buffer, ib->data,
|
||||
ib->size))
|
||||
if (!update_buffer(GL_ELEMENT_ARRAY_BUFFER, ib->buffer, data, ib->size))
|
||||
goto fail;
|
||||
|
||||
return;
|
||||
|
|
@ -87,6 +87,16 @@ fail:
|
|||
blog(LOG_ERROR, "gs_indexbuffer_flush (GL) failed");
|
||||
}
|
||||
|
||||
void gs_indexbuffer_flush(gs_indexbuffer_t *ib)
|
||||
{
|
||||
gs_indexbuffer_flush_internal(ib, ib->data);
|
||||
}
|
||||
|
||||
void gs_indexbuffer_flush_direct(gs_indexbuffer_t *ib, const void *data)
|
||||
{
|
||||
gs_indexbuffer_flush_internal(ib, data);
|
||||
}
|
||||
|
||||
void *gs_indexbuffer_get_data(const gs_indexbuffer_t *ib)
|
||||
{
|
||||
return ib->data;
|
||||
|
|
|
|||
|
|
@ -120,45 +120,51 @@ void gs_vertexbuffer_destroy(gs_vertbuffer_t *vb)
|
|||
}
|
||||
}
|
||||
|
||||
void gs_vertexbuffer_flush(gs_vertbuffer_t *vb)
|
||||
static inline void gs_vertexbuffer_flush_internal(gs_vertbuffer_t *vb,
|
||||
const struct gs_vb_data *data)
|
||||
{
|
||||
size_t i;
|
||||
size_t num_tex = data->num_tex < vb->data->num_tex
|
||||
? data->num_tex
|
||||
: vb->data->num_tex;
|
||||
|
||||
if (!vb->dynamic) {
|
||||
blog(LOG_ERROR, "vertex buffer is not dynamic");
|
||||
goto failed;
|
||||
}
|
||||
|
||||
if (!update_buffer(GL_ARRAY_BUFFER, vb->vertex_buffer,
|
||||
vb->data->points,
|
||||
vb->data->num * sizeof(struct vec3)))
|
||||
goto failed;
|
||||
if (data->points) {
|
||||
if (!update_buffer(GL_ARRAY_BUFFER, vb->vertex_buffer,
|
||||
data->points,
|
||||
data->num * sizeof(struct vec3)))
|
||||
goto failed;
|
||||
}
|
||||
|
||||
if (vb->normal_buffer) {
|
||||
if (vb->normal_buffer && data->normals) {
|
||||
if (!update_buffer(GL_ARRAY_BUFFER, vb->normal_buffer,
|
||||
vb->data->normals,
|
||||
vb->data->num * sizeof(struct vec3)))
|
||||
data->normals,
|
||||
data->num * sizeof(struct vec3)))
|
||||
goto failed;
|
||||
}
|
||||
|
||||
if (vb->tangent_buffer) {
|
||||
if (vb->tangent_buffer && data->tangents) {
|
||||
if (!update_buffer(GL_ARRAY_BUFFER, vb->tangent_buffer,
|
||||
vb->data->tangents,
|
||||
vb->data->num * sizeof(struct vec3)))
|
||||
data->tangents,
|
||||
data->num * sizeof(struct vec3)))
|
||||
goto failed;
|
||||
}
|
||||
|
||||
if (vb->color_buffer) {
|
||||
if (vb->color_buffer && data->colors) {
|
||||
if (!update_buffer(GL_ARRAY_BUFFER, vb->color_buffer,
|
||||
vb->data->colors,
|
||||
vb->data->num * sizeof(uint32_t)))
|
||||
data->colors,
|
||||
data->num * sizeof(uint32_t)))
|
||||
goto failed;
|
||||
}
|
||||
|
||||
for (i = 0; i < vb->data->num_tex; i++) {
|
||||
for (i = 0; i < num_tex; i++) {
|
||||
GLuint buffer = vb->uv_buffers.array[i];
|
||||
struct gs_tvertarray *tv = vb->data->tvarray+i;
|
||||
size_t size = vb->data->num * tv->width * sizeof(float);
|
||||
struct gs_tvertarray *tv = data->tvarray+i;
|
||||
size_t size = data->num * tv->width * sizeof(float);
|
||||
|
||||
if (!update_buffer(GL_ARRAY_BUFFER, buffer, tv->array, size))
|
||||
goto failed;
|
||||
|
|
@ -170,6 +176,17 @@ failed:
|
|||
blog(LOG_ERROR, "gs_vertexbuffer_flush (GL) failed");
|
||||
}
|
||||
|
||||
void gs_vertexbuffer_flush(gs_vertbuffer_t *vb)
|
||||
{
|
||||
gs_vertexbuffer_flush_internal(vb, vb->data);
|
||||
}
|
||||
|
||||
void gs_vertexbuffer_flush_direct(gs_vertbuffer_t *vb,
|
||||
const struct gs_vb_data *data)
|
||||
{
|
||||
gs_vertexbuffer_flush_internal(vb, data);
|
||||
}
|
||||
|
||||
struct gs_vb_data *gs_vertexbuffer_get_data(const gs_vertbuffer_t *vb)
|
||||
{
|
||||
return vb->data;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue