static void nvpr_set_transform(void *render, float *t, int reset) { render_ctx *ctx = render; if (reset) identity(ctx->transform); Transform3x2 tr; tr[0][0] = t[0]; tr[1][0] = t[1]; tr[0][1] = t[2]; tr[1][1] = t[3]; tr[0][2] = t[4]; tr[1][2] = t[5]; mul(ctx->transform, ctx->transform, tr); MatrixLoadToGL(ctx->transform); }
void display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); glMatrixPushEXT(GL_MODELVIEW); { Transform3x2 mat; mul(mat, view, model); MatrixLoadToGL(mat); drawTigerRange(filling, stroking, 0, path_count); } glMatrixPopEXT(GL_MODELVIEW); glutSwapBuffers(); }
static void nvpr_begin_frame(void *render, int viewportWidth, int viewportHeight, int winWidth, int winHeight, int width, int height) { render_ctx *ctx = render; ctx->winWidth = winWidth, ctx->winHeight = winHeight, ctx->width = width, ctx->height = height; g_glMatrixLoadIdentityEXT(GL_PROJECTION); g_glMatrixOrthoEXT(GL_PROJECTION, 0, winWidth, winHeight, 0, -1, 1); g_glMatrixLoadIdentityEXT(GL_MODELVIEW); float scalex = (float)width/viewportWidth; float scaley = (float)height/viewportHeight; float best_scale = scalex < scaley ? scalex : scaley; identity(ctx->transform); translate(ctx->transform, -(viewportWidth*best_scale - width)/2, -(viewportHeight*best_scale - height)/2); Transform3x2 tr; scale(tr, best_scale, best_scale); mul(ctx->transform, ctx->transform, tr); MatrixLoadToGL(ctx->transform); }