fs-write-z.c revision 1a840cc5925f52079916feb2c456816a7a91d627
1d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca/* Test the writing Z in fragment shader. 2d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca * The red quad should be entirely in front of the blue quad even 3d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca * though the overlap and intersect in Z. 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é Fonseca 17d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecastruct vertex { 18d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca float position[4]; 19d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca float color[4]; 20d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca}; 21d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 22d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca#define z0 0.2 23d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca#define z01 0.5 24d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca#define z1 0.4 25d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 26d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 27d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecastatic struct vertex vertices[] = 28d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca{ 29d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca /* left quad: clock-wise, front-facing, red */ 30d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca { 31d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca {-0.8, -0.9, z0, 1.0 }, 32d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca { 1, 0, 0, 1 } 33d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca }, 34d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 35d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca { 36d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca { -0.2, -0.9, z0, 1.0 }, 37d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca { 1, 0, 0, 1 } 38d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca }, 39d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 40d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca { 41d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca { 0.2, 0.9, z01, 1.0 }, 42d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca { 1, 0, 0, 1 } 43d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca }, 44d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 45d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca { 46d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca {-0.9, 0.9, z01, 1.0 }, 47d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca { 1, 0, 0, 1 } 48d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca }, 49d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 50d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca /* right quad : counter-clock-wise, back-facing, green */ 51d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca { 52d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca { 0.2, -0.9, z1, 1.0 }, 53d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca { 0, 0, 1, -1 } 54d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca }, 55d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 56d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca { 57d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca { -0.2, 0.8, z1, 1.0 }, 58d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca { 0, 0, 1, -1 } 59d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca }, 60d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 61d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca { 62d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca { 0.9, 0.8, z1, 1.0 }, 63d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca { 0, 0, 1, -1 } 64d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca }, 65d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 66d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca { 67d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca { 0.8, -0.9, z1, 1.0 }, 68d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca { 0, 0, 1, -1 } 69d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca }, 70d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca}; 71d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 72d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca#define NUM_VERTS (sizeof(vertices) / sizeof(vertices[0])) 73d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 74d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 75d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 76d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecastatic void 77d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecaset_vertices(void) 78d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca{ 79d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca struct pipe_vertex_element ve[2]; 80d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca struct pipe_vertex_buffer vbuf; 81d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca void *handle; 82d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 83d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca memset(ve, 0, sizeof ve); 84d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 85d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca ve[0].src_offset = Offset(struct vertex, position); 86d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca ve[0].src_format = PIPE_FORMAT_R32G32B32A32_FLOAT; 87d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca ve[1].src_offset = Offset(struct vertex, color); 88d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca ve[1].src_format = PIPE_FORMAT_R32G32B32A32_FLOAT; 89d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 90d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca handle = info.ctx->create_vertex_elements_state(info.ctx, 2, ve); 91d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca info.ctx->bind_vertex_elements_state(info.ctx, handle); 92d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 93d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 94d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca vbuf.stride = sizeof(struct vertex); 95d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca vbuf.buffer_offset = 0; 961a840cc5925f52079916feb2c456816a7a91d627Marek Olšák vbuf.buffer = pipe_buffer_create_with_data(info.ctx, 971a840cc5925f52079916feb2c456816a7a91d627Marek Olšák PIPE_BIND_VERTEX_BUFFER, 981a840cc5925f52079916feb2c456816a7a91d627Marek Olšák PIPE_USAGE_STATIC, 991a840cc5925f52079916feb2c456816a7a91d627Marek Olšák sizeof(vertices), 1001a840cc5925f52079916feb2c456816a7a91d627Marek Olšák vertices); 101d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 102d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca info.ctx->set_vertex_buffers(info.ctx, 1, &vbuf); 103d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca} 104d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 105d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 106d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecastatic void 107d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecaset_vertex_shader(void) 108d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca{ 109d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca void *handle; 110d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca const char *text = 111d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca "VERT\n" 112d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca "DCL IN[0]\n" 113d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca "DCL IN[1]\n" 114d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca "DCL OUT[0], POSITION\n" 115d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca "DCL OUT[1], GENERIC[0]\n" 116d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca " 0: MOV OUT[0], IN[0]\n" 117d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca " 1: MOV OUT[1], IN[1]\n" 118d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca " 2: END\n"; 119d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 120d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca handle = graw_parse_vertex_shader(info.ctx, text); 121d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca info.ctx->bind_vs_state(info.ctx, handle); 122d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca} 123d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 124d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 125d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecastatic void 126d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecaset_fragment_shader(void) 127d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca{ 128d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca void *handle; 129d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca const char *text = 130d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca "FRAG\n" 131d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca "DCL IN[0], GENERIC, CONSTANT\n" 132d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca "DCL OUT[0], COLOR\n" 133d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca "DCL OUT[1], POSITION\n" 134d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca "DCL TEMP[0]\n" 135d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca "IMM FLT32 { 1.0, 0.0, 0.0, 0.0 }\n" 136d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca "IMM FLT32 { 0.0, 1.0, 0.0, 0.0 }\n" 137d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca "IMM FLT32 { 0.5, 0.4, 0.0, 0.0 }\n" 138d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca " 0: MOV OUT[0], IN[0]\n" /* front-facing: red */ 139d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca " 1: IF IN[0].xxxx :3\n" 140d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca " 2: MOV OUT[1].z, IMM[2].yyyy\n" /* red: Z = 0.4 */ 141d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca " 3: ELSE :5\n" 142d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca " 4: MOV OUT[1].z, IMM[2].xxxx\n" /* blue: Z = 0.5 */ 143d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca " 5: ENDIF\n" 144d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca " 6: END\n"; 145d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 146d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca handle = graw_parse_fragment_shader(info.ctx, text); 147d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca info.ctx->bind_fs_state(info.ctx, handle); 148d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca} 149d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 150d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 151d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 152d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecastatic void 153d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecadraw(void) 154d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca{ 155d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca union pipe_color_union clear_color; 156d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 157d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca clear_color.f[0] = 0.25; 158d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca clear_color.f[1] = 0.25; 159d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca clear_color.f[2] = 0.25; 160d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca clear_color.f[3] = 1.00; 161d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 162d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca info.ctx->clear(info.ctx, 163d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca PIPE_CLEAR_COLOR | PIPE_CLEAR_DEPTHSTENCIL, 164d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca &clear_color, 1.0, 0); 165d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca util_draw_arrays(info.ctx, PIPE_PRIM_QUADS, 0, NUM_VERTS); 166d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca info.ctx->flush(info.ctx, NULL); 167d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 168d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca#if 0 169d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca /* At the moment, libgraw leaks out/makes available some of the 170d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca * symbols from gallium/auxiliary, including these debug helpers. 171d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca * Will eventually want to bless some of these paths, and lock the 172d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca * others down so they aren't accessible from test programs. 173d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca * 174d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca * This currently just happens to work on debug builds - a release 175d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca * build will probably fail to link here: 176d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca */ 177d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca debug_dump_surface_bmp(info.ctx, "result.bmp", surf); 178d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca#endif 179d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 180d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca graw_util_flush_front(&info); 181d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca} 182d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 183d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 184d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca#if 0 185d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecastatic void 186d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecaresize(int w, int h) 187d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca{ 188d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca width = w; 189d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca height = h; 190d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 191d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca graw_util_viewport(&info, 0, 0, width, height, -1.0, 1.0); 192d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca} 193d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca#endif 194d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 195d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 196d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecastatic void 197d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecainit(void) 198d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca{ 199d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca if (!graw_util_create_window(&info, width, height, 1, TRUE)) 200d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca exit(1); 201d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 202d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca graw_util_default_state(&info, TRUE); 203d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 204d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca graw_util_viewport(&info, 0, 0, width, height, -1.0, 1.0); 205d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 206d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca set_vertices(); 207d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca set_vertex_shader(); 208d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca set_fragment_shader(); 209d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca} 210d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 211d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 212d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecaint 213d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonsecamain(int argc, char *argv[]) 214d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca{ 215d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca init(); 216d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 217d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca printf("The red quad should be entirely in front of the blue quad.\n"); 218d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca 219d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca graw_set_display_func(draw); 220d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca /*graw_set_reshape_func(resize);*/ 221d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca graw_main_loop(); 222d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca return 0; 223d35d3d612acef1612aaab9a923b8814d4dbb4d9cJosé Fonseca} 224