summaryrefslogtreecommitdiff
path: root/src/example/example_texture.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/example/example_texture.c')
-rw-r--r--src/example/example_texture.c101
1 files changed, 101 insertions, 0 deletions
diff --git a/src/example/example_texture.c b/src/example/example_texture.c
new file mode 100644
index 0000000..5411a12
--- /dev/null
+++ b/src/example/example_texture.c
@@ -0,0 +1,101 @@
+#include "example.h"
+
+Vert** quad;
+static Vec3 verts[] = {
+ // front face
+ {1, 1, 1}, {-1, 1, 1}, {-1, -1, 1}, {1, -1, 1},
+ // back face
+ {1, 1, -1}, {-1, 1, -1}, {-1, -1, -1}, {1, -1, -1},
+};
+static Color colors[] = {
+ 0xffff0000, 0xff00ff00, 0xff0000ff, 0xffff00ff,
+ 0xffaa28aa, 0xffFFC58E, 0xffA100FF, 0xffFAFF00,
+};
+
+int face[] = {
+ 0, 1, 2, 0, 2, 3,
+ 1, 5, 2, 2, 5, 6,
+ 4, 6, 5, 4, 7, 6,
+ 0, 7, 4, 0, 3, 7,
+ 0, 4, 1, 1, 4, 5,
+ 2, 6, 3, 3, 6, 7
+};
+
+static Mat4 m;
+
+void vert(UniformCollection* uniforms, VertexShaderIn* in, Vec4* homocoord) {
+ static Vec4 p; p.xyz = *in->vertex->position; p.w = 1;
+ mat4_applytovec4(uniforms->mvp, &p, homocoord);
+}
+bool frag(UniformCollection* uniforms, FragmentShaderIn* in, Color* color) {
+ ssrS_bcpcolor(in->bc, in->A->color, in->B->color, in->C->color, color);
+ //ssrum4(1);
+ //Vec2 uv;
+ //ssrS_bcpvec2(in->bc, in->A->uv, in->B->uv, in->C->uv, &uv);
+ //int x = uv.x * 10;
+ //int y = uv.y * 10;
+ //if (x % 2 && y % 2) {
+ // *color = 0xffffffff;
+ //} else {
+ // *color = 0xff111111;
+ //}
+ return 0;
+}
+Program program = { vert, frag };
+
+void onloadtexture(void* data) {
+ ssr_matrixmode(MATRIX_PROJECTION);
+ ssr_loadidentity();
+ ssr_perspective(100, 1.25f, 0.1f, 10);
+ ssr_matrixmode(MATRIX_VIEW);
+ ssr_loadidentity();
+ //Vec3 pos = { 0,0,0 }, target = { 0,0,-1 }, up = { 0,1,0 };
+ //ssr_lookat(&pos, &target, &up);
+
+ /*���ö�������*/
+ quad = ssrM_newvector(Vert*, 8);
+ quad[0] = vert_new(VERTMASK_POSITION | VERTMASK_COLOR);
+ quad[1] = vert_new(VERTMASK_POSITION | VERTMASK_COLOR);
+ quad[2] = vert_new(VERTMASK_POSITION | VERTMASK_COLOR);
+ quad[3] = vert_new(VERTMASK_POSITION | VERTMASK_COLOR);
+ quad[4] = vert_new(VERTMASK_POSITION | VERTMASK_COLOR);
+ quad[5] = vert_new(VERTMASK_POSITION | VERTMASK_COLOR);
+ quad[6] = vert_new(VERTMASK_POSITION | VERTMASK_COLOR);
+ quad[7] = vert_new(VERTMASK_POSITION | VERTMASK_COLOR);
+ *quad[0]->position = verts[0]; quad[0]->color = colors[0]; quad[0]->index = 0;
+ *quad[1]->position = verts[1]; quad[1]->color = colors[1]; quad[1]->index = 1;
+ *quad[2]->position = verts[2]; quad[2]->color = colors[2]; quad[2]->index = 2;
+ *quad[3]->position = verts[3]; quad[3]->color = colors[3]; quad[3]->index = 3;
+ *quad[4]->position = verts[4]; quad[4]->color = colors[4]; quad[4]->index = 4;
+ *quad[5]->position = verts[5]; quad[5]->color = colors[5]; quad[5]->index = 5;
+ *quad[6]->position = verts[6]; quad[6]->color = colors[6]; quad[6]->index = 6;
+ *quad[7]->position = verts[7]; quad[7]->color = colors[7]; quad[7]->index = 7;
+
+ ssr_bindvertices(quad, 8, face, 12);
+
+ ssr_useprogram(&program);
+ ssr_enable(ENABLEMASK_BACKFACECULL);
+ ssr_enable(ENABLEMASK_DEPTHTEST);
+}
+
+void oneventtexture(void* data) {
+ SDL_Event* e = (SDL_Event*)data;
+}
+
+static float _t = 0;
+
+void onupdatetexture(void*data) {
+ uint dt = *(uint*)data;
+ ssr_matrixmode(MATRIX_MODEL);
+ ssr_loadidentity();
+ ssr_translate(0, 0, -3);
+// ssr_rotate(-30, 1, 1, 0);
+ ssr_rotate(360 * sin(_t += dt/5000.f), 1, 1, 0);
+}
+
+void ondrawtexture(void*data) {
+ ssr_clearcolor(0x00);
+ ssr_cleardepth();
+
+ ssr_draw(PRIMITIVE_TRIANGLE);
+}