1d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca/* Test gallium occlusion queries. 2d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca */ 3d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 4d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca#include <stdio.h> 5d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 6d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca#include "graw_util.h" 7d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 8d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 9d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecastatic int width = 300; 10d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecastatic int height = 300; 11d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 12d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca/* expected results of occlusion test (depndsd on window size) */ 13d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecastatic int expected1 = (int) ((300 * 0.9) * (300 * 0.9)); 14d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecastatic int expected2 = 420; 15d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 16d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 17d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecastatic struct graw_info info; 18d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 19d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecastruct vertex { 20d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca float position[4]; 21d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca float color[4]; 22d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca}; 23d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 24d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca#define z0 0.2 25d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca#define z1 0.6 26d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 27d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecastatic struct vertex obj1_vertices[4] = 28d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca{ 29d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca { 30d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca {-0.9, -0.9, z0, 1.0 }, 31d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca { 1, 0, 0, 1 } 32d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca }, 33d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 34d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca { 35d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca { 0.9, -0.9, z0, 1.0 }, 36d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca { 1, 0, 0, 1 } 37d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca }, 38d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 39d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca { 40d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca { 0.9, 0.9, z0, 1.0 }, 41d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca { 1, 0, 0, 1 } 42d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca }, 43d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 44d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca { 45d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca {-0.9, 0.9, z0, 1.0 }, 46d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca { 1, 0, 0, 1 } 47d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca } 48d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca}; 49d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 50d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecastatic struct vertex obj2_vertices[4] = 51d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca{ 52d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca { 53d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca { -0.2, -0.2, z1, 1.0 }, 54d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca { 0, 0, 1, 1 } 55d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca }, 56d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 57d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca { 58d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca { 0.95, -0.2, z1, 1.0 }, 59d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca { 0, 0, 1, 1 } 60d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca }, 61d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 62d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca { 63d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca { 0.95, 0.2, z1, 1.0 }, 64d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca { 0, 0, 1, 1 } 65d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca }, 66d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 67d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca { 68d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca { -0.2, 0.2, z1, 1.0 }, 69d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca { 0, 0, 1, 1 } 70d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca }, 71d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca}; 72d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 73d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca#define NUM_VERTS 4 74d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 75d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 76d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 77d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecastatic void 78d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecaset_vertices(struct vertex *vertices, unsigned bytes) 79d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca{ 80d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca struct pipe_vertex_element ve[2]; 81d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca struct pipe_vertex_buffer vbuf; 82d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca void *handle; 83d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 84d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca memset(ve, 0, sizeof ve); 85d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 86d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca ve[0].src_offset = Offset(struct vertex, position); 87d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca ve[0].src_format = PIPE_FORMAT_R32G32B32A32_FLOAT; 88d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca ve[1].src_offset = Offset(struct vertex, color); 89d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca ve[1].src_format = PIPE_FORMAT_R32G32B32A32_FLOAT; 90d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 91d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca handle = info.ctx->create_vertex_elements_state(info.ctx, 2, ve); 92d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca info.ctx->bind_vertex_elements_state(info.ctx, handle); 93d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 94d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 95d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca vbuf.stride = sizeof(struct vertex); 96d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca vbuf.buffer_offset = 0; 971a840cc5925f52079916feb2c456816a7a91d627Marek Olšák vbuf.buffer = pipe_buffer_create_with_data(info.ctx, 981a840cc5925f52079916feb2c456816a7a91d627Marek Olšák PIPE_BIND_VERTEX_BUFFER, 99c32114460dbb7f33885c181a0d7dee07b15b8751Marek Olšák PIPE_USAGE_DEFAULT, 1001a840cc5925f52079916feb2c456816a7a91d627Marek Olšák bytes, 1011a840cc5925f52079916feb2c456816a7a91d627Marek Olšák vertices); 102d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 103e73bf3b805de78299f1a652668ba4e6eab9bac94Marek Olšák info.ctx->set_vertex_buffers(info.ctx, 0, 1, &vbuf); 104d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca} 105d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 106d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 107d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecastatic void 108d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecaset_vertex_shader(struct graw_info *info) 109d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca{ 110d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca void *handle; 111d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca const char *text = 112d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca "VERT\n" 113d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca "DCL IN[0]\n" 114d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca "DCL IN[1]\n" 115d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca "DCL OUT[0], POSITION\n" 116d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca "DCL OUT[1], GENERIC[0]\n" 117d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca " 0: MOV OUT[0], IN[0]\n" 118d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca " 1: MOV OUT[1], IN[1]\n" 119d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca " 2: END\n"; 120d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 121d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca handle = graw_parse_vertex_shader(info->ctx, text); 122d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca if (!handle) { 123d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca debug_printf("Failed to parse vertex shader\n"); 124d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca return; 125d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca } 126d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca info->ctx->bind_vs_state(info->ctx, handle); 127d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca} 128d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 129d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 130d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecastatic void 131d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecaset_fragment_shader(struct graw_info *info) 132d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca{ 133d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca void *handle; 134d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca const char *text = 135d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca "FRAG\n" 136d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca "DCL IN[0], GENERIC, LINEAR\n" 137d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca "DCL OUT[0], COLOR\n" 138d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca " 0: MOV OUT[0], IN[0]\n" 139d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca " 1: END\n"; 140d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 141d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca handle = graw_parse_fragment_shader(info->ctx, text); 142d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca if (!handle) { 143d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca debug_printf("Failed to parse fragment shader\n"); 144d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca return; 145d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca } 146d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca info->ctx->bind_fs_state(info->ctx, handle); 147d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca} 148d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 149d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 150d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecastatic void 151d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecadraw(void) 152d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca{ 153d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca int expected1_min = (int) (expected1 * 0.95); 154d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca int expected1_max = (int) (expected1 * 1.05); 155d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca int expected2_min = (int) (expected2 * 0.95); 156d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca int expected2_max = (int) (expected2 * 1.05); 157d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 158d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca union pipe_color_union clear_color; 159d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 160d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca struct pipe_query *q1, *q2; 1612532f0d063d8326c1ba6fdb3394bb355326c4190José Fonseca union pipe_query_result res1, res2; 162d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 163d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca clear_color.f[0] = 0.25; 164d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca clear_color.f[1] = 0.25; 165d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca clear_color.f[2] = 0.25; 166d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca clear_color.f[3] = 1.00; 167d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 168d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca info.ctx->clear(info.ctx, 169d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca PIPE_CLEAR_COLOR | PIPE_CLEAR_DEPTHSTENCIL, 170d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca &clear_color, 1.0, 0); 171d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 17243e4b3e311df3bede930229380a7aa389ac7019aIlia Mirkin q1 = info.ctx->create_query(info.ctx, PIPE_QUERY_OCCLUSION_COUNTER, 0); 17343e4b3e311df3bede930229380a7aa389ac7019aIlia Mirkin q2 = info.ctx->create_query(info.ctx, PIPE_QUERY_OCCLUSION_COUNTER, 0); 174d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 175d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca /* draw first, large object */ 176d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca set_vertices(obj1_vertices, sizeof(obj1_vertices)); 177d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca info.ctx->begin_query(info.ctx, q1); 178d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca util_draw_arrays(info.ctx, PIPE_PRIM_QUADS, 0, NUM_VERTS); 179d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca info.ctx->end_query(info.ctx, q1); 180d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 181d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca /* draw second, small object behind first object */ 182d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca set_vertices(obj2_vertices, sizeof(obj2_vertices)); 183d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca info.ctx->begin_query(info.ctx, q2); 184d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca util_draw_arrays(info.ctx, PIPE_PRIM_QUADS, 0, NUM_VERTS); 185d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca info.ctx->end_query(info.ctx, q2); 186d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 187d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca info.ctx->get_query_result(info.ctx, q1, TRUE, &res1); 188d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca info.ctx->get_query_result(info.ctx, q2, TRUE, &res2); 189d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 1902532f0d063d8326c1ba6fdb3394bb355326c4190José Fonseca printf("result1 = %lu result2 = %lu\n", res1.u64, res2.u64); 1912532f0d063d8326c1ba6fdb3394bb355326c4190José Fonseca if (res1.u64 < expected1_min || res1.u64 > expected1_max) 192d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca printf(" Failure: result1 should be near %d\n", expected1); 1932532f0d063d8326c1ba6fdb3394bb355326c4190José Fonseca if (res2.u64 < expected2_min || res2.u64 > expected2_max) 194d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca printf(" Failure: result2 should be near %d\n", expected2); 195d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 196598cc1f74d7ae924e84dee801b456ab7b0b22f84Marek Olšák info.ctx->flush(info.ctx, NULL, 0); 197d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 198d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca graw_util_flush_front(&info); 199d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 200d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca info.ctx->destroy_query(info.ctx, q1); 201d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca info.ctx->destroy_query(info.ctx, q2); 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 graw_util_viewport(&info, 0, 0, width, height, 30, 1000); 213d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca} 214d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca#endif 215d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 216d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 217d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecastatic void 218d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecainit(void) 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_vertex_shader(&info); 228d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca set_fragment_shader(&info); 229d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca} 230d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 231d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 232d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecaint 233d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecamain(int argc, char *argv[]) 234d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca{ 235d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca init(); 236d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 237d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca printf("The red quad should mostly occlude the blue quad.\n"); 238d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 239d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca graw_set_display_func(draw); 240d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca /*graw_set_reshape_func(resize);*/ 241d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca graw_main_loop(); 242d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca return 0; 243d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca} 244