summaryrefslogtreecommitdiff
path: root/src/example/example_texture.c
blob: 5411a1215e1b35c174f648d89be6b97545f10cc1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
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);
}