Dawn/src/script/api/display.c

223 lines
6.5 KiB
C

/**
* Copyright (c) 2021 Dominic Masters
*
* This software is released under the MIT License.
* https://opensource.org/licenses/MIT
*/
#include "display.h"
scripterreturn_t _scriptPrimitiveCreate(scriptercontext_t *ctx) {
primitive_t *primitive = malloc(sizeof(primitive_t));
duk_push_pointer(ctx, primitive);
return 1;
}
scripterreturn_t _scriptPrimitiveInit(scriptercontext_t *ctx) {
primitive_t *primitive = duk_to_pointer(ctx, 0);
int32_t verticeCount = duk_to_int32(ctx, 1);
int32_t indiceCount = duk_to_int32(ctx, 2);
primitiveInit(primitive, verticeCount, indiceCount);
return 0;
}
scripterreturn_t _scriptPrimitiveDraw(scriptercontext_t *context) {
primitive_t *primitive = duk_to_pointer(context, 0);
int32_t start = duk_to_int32(context, 1);
int32_t count = duk_to_int32(context, 2);
primitiveDraw(primitive, start, count);
return 0;
}
scripterreturn_t _scriptPrimitiveDispose(scriptercontext_t *context) {
primitive_t *primitive = duk_to_pointer(context, 0);
primitiveDispose(primitive);
free(primitive);
return 0;
}
scripterreturn_t _scriptQuadInit(scriptercontext_t *ctx) {
quadInit(duk_to_pointer(ctx, 0), (float)duk_to_number(ctx, 1),
(float)duk_to_number(ctx, 2), (float)duk_to_number(ctx, 3),
(float)duk_to_number(ctx, 4), (float)duk_to_number(ctx, 5),
(float)duk_to_number(ctx, 6), (float)duk_to_number(ctx, 7),
(float)duk_to_number(ctx, 8), (float)duk_to_number(ctx, 9)
);
return 0;
}
scripterreturn_t _scriptCameraCreate(scriptercontext_t *ctx) {
camera_t *camera = malloc(sizeof(camera_t));
duk_push_pointer(ctx, camera);
return 1;
}
scripterreturn_t _scriptCameraLookAt(scriptercontext_t *ctx) {
cameraLookAt(duk_to_pointer(ctx, 0),
(float)duk_to_number(ctx, 1),
(float)duk_to_number(ctx, 2),
(float)duk_to_number(ctx, 3),
(float)duk_to_number(ctx, 4),
(float)duk_to_number(ctx, 5),
(float)duk_to_number(ctx, 6)
);
return 0;
}
scripterreturn_t _scriptCameraLook(scriptercontext_t *ctx) {
cameraLook(
duk_to_pointer(ctx, 0),
(float)duk_to_number(ctx, 1),
(float)duk_to_number(ctx, 2),
(float)duk_to_number(ctx, 3),
(float)duk_to_number(ctx, 4),
(float)duk_to_number(ctx, 5),
(float)duk_to_number(ctx, 6)
);
return 0;
}
scripterreturn_t _scriptCameraPerspective(scriptercontext_t *ctx) {
cameraPerspective(
duk_to_pointer(ctx, 0),
(float)duk_to_number(ctx, 1),
(float)duk_to_number(ctx, 2),
(float)duk_to_number(ctx, 3),
(float)duk_to_number(ctx, 4)
);
return 0;
}
scripterreturn_t _scriptCameraOrtho(scriptercontext_t *ctx) {
cameraOrtho(
duk_to_pointer(ctx, 0),
(float)duk_to_number(ctx, 1),
(float)duk_to_number(ctx, 2),
(float)duk_to_number(ctx, 3),
(float)duk_to_number(ctx, 4),
(float)duk_to_number(ctx, 5),
(float)duk_to_number(ctx, 6)
);
return 0;
}
scripterreturn_t _scriptCameraDispose(scriptercontext_t *ctx) {
camera_t *camera = duk_to_pointer(ctx, 0);
free(camera);
return 0;
}
scripterreturn_t _scriptShaderCreate(scriptercontext_t *ctx) {
shader_t *shader = malloc(sizeof(shader_t));
duk_push_pointer(ctx, shader);
return 1;
}
scripterreturn_t _scriptShaderInit(scriptercontext_t *ctx) {
shader_t *shader = duk_to_pointer(ctx, 0);
char *vertex = duk_to_string(ctx, 1);
char *frag = duk_to_string(ctx, 2);
shaderInit(shader, vertex, frag);
return 0;
}
scripterreturn_t _scriptShaderDispose(scriptercontext_t *ctx) {
shader_t *shader = duk_to_pointer(ctx, 0);
shaderDispose(shader);
free(shader);
return 0;
}
scripterreturn_t _scriptShaderUse(scriptercontext_t *ctx) {
shaderUse(duk_to_pointer(ctx, 0));
return 0;
}
scripterreturn_t _scriptShaderUseCamera(scriptercontext_t *ctx) {
shaderUseCamera(duk_to_pointer(ctx, 0), duk_to_pointer(ctx, 1));
return 0;
}
scripterreturn_t _scriptShaderUseTexture(scriptercontext_t *ctx) {
shaderUseTexture(duk_to_pointer(ctx, 0), duk_to_pointer(ctx, 1));
return 0;
}
scripterreturn_t _scriptShaderUsePosition(scriptercontext_t *ctx) {
shaderUsePosition(
duk_to_pointer(ctx, 0),
(float)duk_to_number(ctx, 1),
(float)duk_to_number(ctx, 2),
(float)duk_to_number(ctx, 3),
(float)duk_to_number(ctx, 4),
(float)duk_to_number(ctx, 5),
(float)duk_to_number(ctx, 6)
);
return 0;
}
scripterreturn_t _scriptShaderUsePositionAndScale(scriptercontext_t *ctx) {
shaderUsePositionAndScale(
duk_to_pointer(ctx, 0),
(float)duk_to_number(ctx, 1),
(float)duk_to_number(ctx, 2),
(float)duk_to_number(ctx, 3),
(float)duk_to_number(ctx, 4),
(float)duk_to_number(ctx, 5),
(float)duk_to_number(ctx, 6),
(float)duk_to_number(ctx, 7),
(float)duk_to_number(ctx, 8),
(float)duk_to_number(ctx, 9)
);
return 0;
}
scripterreturn_t _scriptTextureCreate(scriptercontext_t *ctx) {
texture_t *texture = malloc(sizeof(texture_t));
duk_push_pointer(ctx, texture);
return 1;
}
scripterreturn_t _scriptTextureDispose(scriptercontext_t *ctx) {
texture_t *texture = duk_to_pointer(ctx, 0);
textureDispose(texture);
free(texture);
return 0;
}
void scriptsApiDisplay(scripter_t *s) {
scripterDefineMethod(s, "primitiveCreate", 0, &_scriptPrimitiveCreate);
scripterDefineMethod(s, "primitiveInit", 3, &_scriptPrimitiveInit);
scripterDefineMethod(s, "primitiveDraw", 3, &_scriptPrimitiveDraw);
scripterDefineMethod(s, "primitiveDispose",1,&_scriptPrimitiveDispose);
scripterDefineMethod(s, "quadInit", 10, &_scriptQuadInit);
scripterDefineMethod(s, "cameraCreate", 0, &_scriptCameraCreate);
scripterDefineMethod(s, "cameraLookAt", 7, &_scriptCameraLookAt);
scripterDefineMethod(s, "cameraLook", 7, &_scriptCameraLook);
scripterDefineMethod(s, "cameraPerspective", 5, &_scriptCameraPerspective);
scripterDefineMethod(s, "cameraOrtho", 7, &_scriptCameraOrtho);
scripterDefineMethod(s, "cameraDispose", 1, &_scriptCameraDispose);
scripterDefineMethod(s, "shaderCreate", 0, &_scriptShaderCreate);
scripterDefineMethod(s, "shaderInit", 3, &_scriptShaderInit);
scripterDefineMethod(s, "shaderDispose", 1, &_scriptShaderDispose);
scripterDefineMethod(s, "shaderUse", 1, &_scriptShaderUse);
scripterDefineMethod(s, "shaderUseTexture", 2, &_scriptShaderUseTexture);
scripterDefineMethod(s, "shaderUseCamera", 2, &_scriptShaderUseCamera);
scripterDefineMethod(s, "shaderUsePosition", 7, &_scriptShaderUsePosition);
scripterDefineMethod(
s, "shaderUsePositionAndScale", 10, &_scriptShaderUsePositionAndScale
);
scripterDefineMethod(s, "textureCreate", 0, &_scriptTextureCreate);
scripterDefineMethod(s, "textureDispose", 1, &_scriptTextureDispose);
}