1d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca/* Test the TGSI_SEMANTIC_POSITION fragment shader input.
2d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca * Plus properties for upper-left vs. lower-left origin and
3d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca * center integer vs. half-integer;
4d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca */
5d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
6d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca#include <stdio.h>
7d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
8d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca#include "graw_util.h"
9d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
10d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
11d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecastatic int width = 300;
12d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecastatic int height = 300;
13d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
14d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecastatic struct graw_info info;
15d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
16d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecastruct vertex {
17d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   float position[4];
18d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   float color[4];
19d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca};
20d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
21d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca/* Note: the upper-left vertex is pushed to the left a bit to
22d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca * make sure we can spot upside-down rendering.
23d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca */
24d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecastatic struct vertex vertices[] =
25d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca{
26d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   {
27d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      {-0.95, -0.95, 0.5, 1.0 },
28d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      { 0, 0, 0, 1 }
29d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   },
30d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
31d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   {
32d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      { 0.85, -0.95, 0.5, 1.0 },
33d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      { 0, 0, 0, 1 }
34d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   },
35d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
36d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   {
37d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      { 0.95,  0.95, 0.5, 1.0 },
38d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      { 0, 0, 0, 1 }
39d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   },
40d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
41d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   {
42d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      {-0.95,  0.95, 0.5, 1.0 },
43d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      { 0, 0, 0, 1 }
44d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   }
45d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca};
46d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
47d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca#define NUM_VERTS (sizeof(vertices) / sizeof(vertices[0]))
48d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
49d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
50d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecastatic void
51d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecaset_vertices(void)
52d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca{
53d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   struct pipe_vertex_element ve[2];
54d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   struct pipe_vertex_buffer vbuf;
55d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   void *handle;
56d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
57d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   memset(ve, 0, sizeof ve);
58d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
59d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   ve[0].src_offset = Offset(struct vertex, position);
60d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   ve[0].src_format = PIPE_FORMAT_R32G32B32A32_FLOAT;
61d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   ve[1].src_offset = Offset(struct vertex, color);
62d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   ve[1].src_format = PIPE_FORMAT_R32G32B32A32_FLOAT;
63d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
64d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   handle = info.ctx->create_vertex_elements_state(info.ctx, 2, ve);
65d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   info.ctx->bind_vertex_elements_state(info.ctx, handle);
66d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
67d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
68d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   vbuf.stride = sizeof(struct vertex);
69d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   vbuf.buffer_offset = 0;
701a840cc5925f52079916feb2c456816a7a91d627Marek Olšák   vbuf.buffer = pipe_buffer_create_with_data(info.ctx,
711a840cc5925f52079916feb2c456816a7a91d627Marek Olšák                                              PIPE_BIND_VERTEX_BUFFER,
721a840cc5925f52079916feb2c456816a7a91d627Marek Olšák                                              PIPE_USAGE_STATIC,
731a840cc5925f52079916feb2c456816a7a91d627Marek Olšák                                              sizeof(vertices),
741a840cc5925f52079916feb2c456816a7a91d627Marek Olšák                                              vertices);
75d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
76d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   info.ctx->set_vertex_buffers(info.ctx, 1, &vbuf);
77d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca}
78d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
79d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
80d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecastatic void
81d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecaset_vertex_shader(void)
82d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca{
83d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   void *handle;
84d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   const char *text =
85d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      "VERT\n"
86d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      "DCL IN[0]\n"
87d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      "DCL IN[1]\n"
88d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      "DCL OUT[0], POSITION\n"
89d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      "DCL OUT[1], GENERIC[0]\n"
90d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      "  0: MOV OUT[0], IN[0]\n"
91d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      "  1: MOV OUT[1], IN[1]\n"
92d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      "  2: END\n";
93d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
94d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   handle = graw_parse_vertex_shader(info.ctx, text);
95d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   info.ctx->bind_vs_state(info.ctx, handle);
96d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca}
97d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
98d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
99d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecastatic void
100d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecaset_fragment_shader(int mode)
101d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca{
102d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   void *handle;
103d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
104d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   const char *origin_upper_left_text =
105d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      "FRAG\n"
106d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      "PROPERTY FS_COORD_ORIGIN UPPER_LEFT\n"  /* upper-left = black corner */
107d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      "DCL IN[0], POSITION, LINEAR\n"
108d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      "DCL OUT[0], COLOR\n"
109d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      "DCL TEMP[0]\n"
110d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      "IMM FLT32 { 0.003333, 0.003333, 1.0, 1.0 }\n"
111d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      "IMM FLT32 { 0.0, 300.0, 0.0, 0.0 }\n"
112d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      " 0: MOV TEMP[0], IN[0] \n"
113d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      " 1: MOV TEMP[0].zw, IMM[1].xxxx \n"
114d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      " 2: MUL OUT[0], TEMP[0], IMM[0] \n"
115d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      " 3: END\n";
116d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
117d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   const char *origin_lower_left_text =
118d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      "FRAG\n"
119d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      "PROPERTY FS_COORD_ORIGIN LOWER_LEFT\n"  /* lower-left = black corner */
120d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      "DCL IN[0], POSITION, LINEAR\n"
121d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      "DCL OUT[0], COLOR\n"
122d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      "DCL TEMP[0]\n"
123d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      "IMM FLT32 { 0.003333, 0.003333, 1.0, 1.0 }\n"
124d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      "IMM FLT32 { 0.0, 300.0, 0.0, 0.0 }\n"
125d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      " 0: MOV TEMP[0], IN[0] \n"
126d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      " 1: MOV TEMP[0].zw, IMM[1].xxxx \n"
127d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      " 2: MUL OUT[0], TEMP[0], IMM[0] \n"
128d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      " 3: END\n";
129d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
130d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   /* Test fragcoord center integer vs. half integer */
131d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   const char *center_integer_text =
132d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      "FRAG\n"
133d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      "PROPERTY FS_COORD_PIXEL_CENTER INTEGER \n"       /* pixels are black */
134d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      "DCL IN[0], POSITION, LINEAR \n"
135d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      "DCL OUT[0], COLOR \n"
136d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      "DCL TEMP[0] \n"
137d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      "IMM FLT32 { 0.003333, 0.003333, 1.0, 1.0 } \n"
138d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      "IMM FLT32 { 0.0, 300.0, 0.0, 0.0 } \n"
139d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      "0: FRC TEMP[0], IN[0]  \n"
140d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      "1: MOV TEMP[0].zw, IMM[1].xxxx \n"
141d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      "2: MOV OUT[0], TEMP[0] \n"
142d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      "3: END \n";
143d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
144d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   const char *center_half_integer_text =
145d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      "FRAG\n"
146d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      "PROPERTY FS_COORD_PIXEL_CENTER HALF_INTEGER \n"  /* pixels are olive colored */
147d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      "DCL IN[0], POSITION, LINEAR \n"
148d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      "DCL OUT[0], COLOR \n"
149d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      "DCL TEMP[0] \n"
150d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      "IMM FLT32 { 0.003333, 0.003333, 1.0, 1.0 } \n"
151d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      "IMM FLT32 { 0.0, 300.0, 0.0, 0.0 } \n"
152d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      "0: FRC TEMP[0], IN[0]  \n"
153d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      "1: MOV TEMP[0].zw, IMM[1].xxxx \n"
154d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      "2: MOV OUT[0], TEMP[0] \n"
155d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      "3: END \n";
156d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
157d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   const char *text;
158d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
159d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   if (mode == 0)
160d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      text = origin_upper_left_text;
161d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   else if (mode == 1)
162d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      text = origin_lower_left_text;
163d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   else if (mode == 2)
164d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      text = center_integer_text;
165d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   else
166d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      text = center_half_integer_text;
167d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
168d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   handle = graw_parse_fragment_shader(info.ctx, text);
169d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   info.ctx->bind_fs_state(info.ctx, handle);
170d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca}
171d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
172d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
173d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecastatic void
174d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecadraw(void)
175d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca{
176d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   union pipe_color_union clear_color;
177d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
178d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   clear_color.f[0] = 0.25;
179d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   clear_color.f[1] = 0.25;
180d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   clear_color.f[2] = 0.25;
181d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   clear_color.f[3] = 1.0;
182d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
183d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   info.ctx->clear(info.ctx,
184d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca              PIPE_CLEAR_COLOR | PIPE_CLEAR_DEPTHSTENCIL,
185d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca              &clear_color, 1.0, 0);
186d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   util_draw_arrays(info.ctx, PIPE_PRIM_QUADS, 0, NUM_VERTS);
187d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   info.ctx->flush(info.ctx, NULL);
188d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
189d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca#if 0
190d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   /* At the moment, libgraw leaks out/makes available some of the
191d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca    * symbols from gallium/auxiliary, including these debug helpers.
192d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca    * Will eventually want to bless some of these paths, and lock the
193d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca    * others down so they aren't accessible from test programs.
194d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca    *
195d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca    * This currently just happens to work on debug builds - a release
196d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca    * build will probably fail to link here:
197d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca    */
198d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   debug_dump_surface_bmp(info.ctx, "result.bmp", surf);
199d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca#endif
200d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
201d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   graw_util_flush_front(&info);
202d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca}
203d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
204d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
205d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca#if 0
206d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecastatic void
207d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecaresize(int w, int h)
208d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca{
209d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   width = w;
210d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   height = h;
211d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
212d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   set_viewport(0, 0, width, height, 30, 1000);
213d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca}
214d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca#endif
215d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
216d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
217d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecastatic void
218d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecainit(int mode)
219d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca{
220d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   if (!graw_util_create_window(&info, width, height, 1, TRUE))
221d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      exit(1);
222d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
223d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   graw_util_default_state(&info, TRUE);
224d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
225d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   graw_util_viewport(&info, 0, 0, width, height, -1.0, 1.0);
226d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
227d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   set_vertices();
228d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   set_vertex_shader();
229d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   set_fragment_shader(mode);
230d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca}
231d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
232d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
233d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecaint
234d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecamain(int argc, char *argv[])
235d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca{
236d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   int mode = argc > 1 ? atoi(argv[1]) : 0;
237d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
238d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   switch (mode) {
239d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   default:
240d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   case 0:
241d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      printf("frag coord origin upper-left (lower-left = black)\n");
242d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      break;
243d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   case 1:
244d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      printf("frag coord origin lower-left (upper-left = black)\n");
245d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      break;
246d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   case 2:
247d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      printf("frag coord center integer (all pixels black)\n");
248d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      break;
249d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   case 3:
250d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      printf("frag coord center half-integer (all pixels olive color)\n");
251d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca      break;
252d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   }
253d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
254d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   init(mode);
255d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca
256d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   graw_set_display_func(draw);
257d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   /*graw_set_reshape_func(resize);*/
258d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   graw_main_loop();
259d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca   return 0;
260d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca}
261