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