static void set_geometry_shader( void ) { void *handle; const char *text = "GEOM\n" "PROPERTY GS_INPUT_PRIMITIVE TRIANGLES\n" "PROPERTY GS_OUTPUT_PRIMITIVE TRIANGLE_STRIP\n" "DCL IN[][0], POSITION, CONSTANT\n" "DCL IN[][1], COLOR, CONSTANT\n" "DCL OUT[0], POSITION, CONSTANT\n" "DCL OUT[1], COLOR, CONSTANT\n" "0:MOV OUT[0], IN[0][0]\n" "1:MOV OUT[1], IN[0][1]\n" "2:EMIT\n" "3:MOV OUT[0], IN[1][0]\n" "4:MOV OUT[1], IN[0][1]\n" /* copy color from input vertex 0 */ "5:EMIT\n" "6:MOV OUT[0], IN[2][0]\n" "7:MOV OUT[1], IN[2][1]\n" "8:EMIT\n" "9:ENDPRIM\n" "10:END\n"; handle = graw_parse_geometry_shader(ctx, text); ctx->bind_gs_state(ctx, handle); }
static void set_geometry_shader( void ) { FILE *f; char buf[50000]; void *handle; int sz; if ((f = fopen(filename, "r")) == NULL) { fprintf(stderr, "Couldn't open %s\n", filename); exit(1); } sz = fread(buf, 1, sizeof(buf), f); if (!feof(f)) { printf("file too long\n"); exit(1); } printf("%.*s\n", sz, buf); buf[sz] = 0; handle = graw_parse_geometry_shader(ctx, buf); ctx->bind_gs_state(ctx, handle); fclose(f); }