diff options
Diffstat (limited to 'src/example/example_texture.c')
-rw-r--r-- | src/example/example_texture.c | 101 |
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); +} |