drawtex.c revision 848b8605
1848b8605Smrg/* 2848b8605Smrg * Copyright (C) 2009 Chia-I Wu <olv@0xlab.org> 3848b8605Smrg * 4848b8605Smrg * Permission is hereby granted, free of charge, to any person obtaining a 5848b8605Smrg * copy of this software and associated documentation files (the "Software"), 6848b8605Smrg * to deal in the Software without restriction, including without limitation 7848b8605Smrg * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8848b8605Smrg * and/or sell copies of the Software, and to permit persons to whom the 9848b8605Smrg * Software is furnished to do so, subject to the following conditions: 10848b8605Smrg * 11848b8605Smrg * The above copyright notice and this permission notice (including the next 12848b8605Smrg * paragraph) shall be included in all copies or substantial portions of the 13848b8605Smrg * Software. 14848b8605Smrg * 15848b8605Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16848b8605Smrg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17848b8605Smrg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18848b8605Smrg * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19848b8605Smrg * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20848b8605Smrg * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 21848b8605Smrg * DEALINGS IN THE SOFTWARE. 22848b8605Smrg */ 23848b8605Smrg 24848b8605Smrg#include "main/drawtex.h" 25848b8605Smrg#include "main/state.h" 26848b8605Smrg#include "main/imports.h" 27848b8605Smrg#include "main/mtypes.h" 28848b8605Smrg 29848b8605Smrg 30848b8605Smrgstatic void 31848b8605Smrgdraw_texture(struct gl_context *ctx, GLfloat x, GLfloat y, GLfloat z, 32848b8605Smrg GLfloat width, GLfloat height) 33848b8605Smrg{ 34848b8605Smrg if (!ctx->Extensions.OES_draw_texture) { 35848b8605Smrg _mesa_error(ctx, GL_INVALID_OPERATION, 36848b8605Smrg "glDrawTex(unsupported)"); 37848b8605Smrg return; 38848b8605Smrg } 39848b8605Smrg if (width <= 0.0f || height <= 0.0f) { 40848b8605Smrg _mesa_error(ctx, GL_INVALID_VALUE, "glDrawTex(width or height <= 0)"); 41848b8605Smrg return; 42848b8605Smrg } 43848b8605Smrg 44848b8605Smrg _mesa_set_vp_override(ctx, GL_TRUE); 45848b8605Smrg 46848b8605Smrg if (ctx->NewState) 47848b8605Smrg _mesa_update_state(ctx); 48848b8605Smrg 49848b8605Smrg ASSERT(ctx->Driver.DrawTex); 50848b8605Smrg ctx->Driver.DrawTex(ctx, x, y, z, width, height); 51848b8605Smrg 52848b8605Smrg _mesa_set_vp_override(ctx, GL_FALSE); 53848b8605Smrg} 54848b8605Smrg 55848b8605Smrg 56848b8605Smrgvoid GLAPIENTRY 57848b8605Smrg_mesa_DrawTexfOES(GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height) 58848b8605Smrg{ 59848b8605Smrg GET_CURRENT_CONTEXT(ctx); 60848b8605Smrg draw_texture(ctx, x, y, z, width, height); 61848b8605Smrg} 62848b8605Smrg 63848b8605Smrg 64848b8605Smrgvoid GLAPIENTRY 65848b8605Smrg_mesa_DrawTexfvOES(const GLfloat *coords) 66848b8605Smrg{ 67848b8605Smrg GET_CURRENT_CONTEXT(ctx); 68848b8605Smrg draw_texture(ctx, coords[0], coords[1], coords[2], coords[3], coords[4]); 69848b8605Smrg} 70848b8605Smrg 71848b8605Smrg 72848b8605Smrgvoid GLAPIENTRY 73848b8605Smrg_mesa_DrawTexiOES(GLint x, GLint y, GLint z, GLint width, GLint height) 74848b8605Smrg{ 75848b8605Smrg GET_CURRENT_CONTEXT(ctx); 76848b8605Smrg draw_texture(ctx, (GLfloat) x, (GLfloat) y, (GLfloat) z, 77848b8605Smrg (GLfloat) width, (GLfloat) height); 78848b8605Smrg} 79848b8605Smrg 80848b8605Smrg 81848b8605Smrgvoid GLAPIENTRY 82848b8605Smrg_mesa_DrawTexivOES(const GLint *coords) 83848b8605Smrg{ 84848b8605Smrg GET_CURRENT_CONTEXT(ctx); 85848b8605Smrg draw_texture(ctx, (GLfloat) coords[0], (GLfloat) coords[1], 86848b8605Smrg (GLfloat) coords[2], (GLfloat) coords[3], (GLfloat) coords[4]); 87848b8605Smrg} 88848b8605Smrg 89848b8605Smrg 90848b8605Smrgvoid GLAPIENTRY 91848b8605Smrg_mesa_DrawTexsOES(GLshort x, GLshort y, GLshort z, GLshort width, GLshort height) 92848b8605Smrg{ 93848b8605Smrg GET_CURRENT_CONTEXT(ctx); 94848b8605Smrg draw_texture(ctx, (GLfloat) x, (GLfloat) y, (GLfloat) z, 95848b8605Smrg (GLfloat) width, (GLfloat) height); 96848b8605Smrg} 97848b8605Smrg 98848b8605Smrg 99848b8605Smrgvoid GLAPIENTRY 100848b8605Smrg_mesa_DrawTexsvOES(const GLshort *coords) 101848b8605Smrg{ 102848b8605Smrg GET_CURRENT_CONTEXT(ctx); 103848b8605Smrg draw_texture(ctx, (GLfloat) coords[0], (GLfloat) coords[1], 104848b8605Smrg (GLfloat) coords[2], (GLfloat) coords[3], (GLfloat) coords[4]); 105848b8605Smrg} 106848b8605Smrg 107848b8605Smrg 108848b8605Smrgvoid GLAPIENTRY 109848b8605Smrg_mesa_DrawTexx(GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height) 110848b8605Smrg{ 111848b8605Smrg GET_CURRENT_CONTEXT(ctx); 112848b8605Smrg draw_texture(ctx, 113848b8605Smrg (GLfloat) x / 65536.0f, 114848b8605Smrg (GLfloat) y / 65536.0f, 115848b8605Smrg (GLfloat) z / 65536.0f, 116848b8605Smrg (GLfloat) width / 65536.0f, 117848b8605Smrg (GLfloat) height / 65536.0f); 118848b8605Smrg} 119848b8605Smrg 120848b8605Smrg 121848b8605Smrgvoid GLAPIENTRY 122848b8605Smrg_mesa_DrawTexxv(const GLfixed *coords) 123848b8605Smrg{ 124848b8605Smrg GET_CURRENT_CONTEXT(ctx); 125848b8605Smrg draw_texture(ctx, 126848b8605Smrg (GLfloat) coords[0] / 65536.0f, 127848b8605Smrg (GLfloat) coords[1] / 65536.0f, 128848b8605Smrg (GLfloat) coords[2] / 65536.0f, 129848b8605Smrg (GLfloat) coords[3] / 65536.0f, 130848b8605Smrg (GLfloat) coords[4] / 65536.0f); 131848b8605Smrg} 132