134064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu/* 234064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu * Copyright (C) 2009 Chia-I Wu <olv@0xlab.org> 334064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu * 434064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu * Permission is hereby granted, free of charge, to any person obtaining a 534064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu * copy of this software and associated documentation files (the "Software"), 634064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu * to deal in the Software without restriction, including without limitation 734064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu * the rights to use, copy, modify, merge, publish, distribute, sublicense, 834064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu * and/or sell copies of the Software, and to permit persons to whom the 934064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu * Software is furnished to do so, subject to the following conditions: 1034064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu * 1134064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu * The above copyright notice and this permission notice (including the next 1234064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu * paragraph) shall be included in all copies or substantial portions of the 1334064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu * Software. 1434064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu * 1534064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1634064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1734064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 1834064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 1934064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 2034064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 2134064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu * DEALINGS IN THE SOFTWARE. 2234064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu */ 2334064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu 241904ba7936eb5a3fa76875a498eb54f3bd5f90a5Kristian Høgsberg#include "main/drawtex.h" 2534064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu#include "main/state.h" 2634064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu#include "main/imports.h" 27db61b9ce39bccc43140357652ceb78baaf2aea44Vinson Lee#include "main/mfeatures.h" 280117da40cd7edd3d165bb28569c289b37eca12b9Vinson Lee#include "main/mtypes.h" 2934064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu 3034064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu 3134064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu#if FEATURE_OES_draw_texture 3234064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu 3334064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu 3434064756a5e2c8952c9de26eaebafddabd562540Chia-I Wustatic void 35f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergdraw_texture(struct gl_context *ctx, GLfloat x, GLfloat y, GLfloat z, 3634064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu GLfloat width, GLfloat height) 3734064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu{ 3834064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu if (!ctx->Extensions.OES_draw_texture) { 3934064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu _mesa_error(ctx, GL_INVALID_OPERATION, 4034064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu "glDrawTex(unsupported)"); 4134064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu return; 4234064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu } 4334064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu if (width <= 0.0f || height <= 0.0f) { 4434064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu _mesa_error(ctx, GL_INVALID_VALUE, "glDrawTex(width or height <= 0)"); 4534064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu return; 4634064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu } 4734064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu 4829d7a0bb16dba1416e3a63f7f44cf82e307ac46aChia-I Wu _mesa_set_vp_override(ctx, GL_TRUE); 4929d7a0bb16dba1416e3a63f7f44cf82e307ac46aChia-I Wu 5034064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu if (ctx->NewState) 5134064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu _mesa_update_state(ctx); 5234064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu 5334064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu ASSERT(ctx->Driver.DrawTex); 5434064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu ctx->Driver.DrawTex(ctx, x, y, z, width, height); 5529d7a0bb16dba1416e3a63f7f44cf82e307ac46aChia-I Wu 5629d7a0bb16dba1416e3a63f7f44cf82e307ac46aChia-I Wu _mesa_set_vp_override(ctx, GL_FALSE); 5734064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu} 5834064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu 5934064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu 6034064756a5e2c8952c9de26eaebafddabd562540Chia-I Wuvoid GLAPIENTRY 6134064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu_mesa_DrawTexf(GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height) 6234064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu{ 6334064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu GET_CURRENT_CONTEXT(ctx); 6434064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu draw_texture(ctx, x, y, z, width, height); 6534064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu} 6634064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu 6734064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu 6834064756a5e2c8952c9de26eaebafddabd562540Chia-I Wuvoid GLAPIENTRY 6934064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu_mesa_DrawTexfv(const GLfloat *coords) 7034064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu{ 7134064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu GET_CURRENT_CONTEXT(ctx); 7234064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu draw_texture(ctx, coords[0], coords[1], coords[2], coords[3], coords[4]); 7334064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu} 7434064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu 7534064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu 7634064756a5e2c8952c9de26eaebafddabd562540Chia-I Wuvoid GLAPIENTRY 7734064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu_mesa_DrawTexi(GLint x, GLint y, GLint z, GLint width, GLint height) 7834064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu{ 7934064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu GET_CURRENT_CONTEXT(ctx); 8034064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu draw_texture(ctx, (GLfloat) x, (GLfloat) y, (GLfloat) z, 8134064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu (GLfloat) width, (GLfloat) height); 8234064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu} 8334064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu 8434064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu 8534064756a5e2c8952c9de26eaebafddabd562540Chia-I Wuvoid GLAPIENTRY 8634064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu_mesa_DrawTexiv(const GLint *coords) 8734064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu{ 8834064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu GET_CURRENT_CONTEXT(ctx); 8934064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu draw_texture(ctx, (GLfloat) coords[0], (GLfloat) coords[1], 9034064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu (GLfloat) coords[2], (GLfloat) coords[3], (GLfloat) coords[4]); 9134064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu} 9234064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu 9334064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu 9434064756a5e2c8952c9de26eaebafddabd562540Chia-I Wuvoid GLAPIENTRY 9534064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu_mesa_DrawTexs(GLshort x, GLshort y, GLshort z, GLshort width, GLshort height) 9634064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu{ 9734064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu GET_CURRENT_CONTEXT(ctx); 9834064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu draw_texture(ctx, (GLfloat) x, (GLfloat) y, (GLfloat) z, 9934064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu (GLfloat) width, (GLfloat) height); 10034064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu} 10134064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu 10234064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu 10334064756a5e2c8952c9de26eaebafddabd562540Chia-I Wuvoid GLAPIENTRY 10434064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu_mesa_DrawTexsv(const GLshort *coords) 10534064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu{ 10634064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu GET_CURRENT_CONTEXT(ctx); 10734064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu draw_texture(ctx, (GLfloat) coords[0], (GLfloat) coords[1], 10834064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu (GLfloat) coords[2], (GLfloat) coords[3], (GLfloat) coords[4]); 10934064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu} 11034064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu 11134064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu 11234064756a5e2c8952c9de26eaebafddabd562540Chia-I Wuvoid GLAPIENTRY 11334064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu_mesa_DrawTexx(GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height) 11434064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu{ 11534064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu GET_CURRENT_CONTEXT(ctx); 11634064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu draw_texture(ctx, 11734064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu (GLfloat) x / 65536.0f, 11834064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu (GLfloat) y / 65536.0f, 11934064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu (GLfloat) z / 65536.0f, 12034064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu (GLfloat) width / 65536.0f, 12134064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu (GLfloat) height / 65536.0f); 12234064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu} 12334064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu 12434064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu 12534064756a5e2c8952c9de26eaebafddabd562540Chia-I Wuvoid GLAPIENTRY 12634064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu_mesa_DrawTexxv(const GLfixed *coords) 12734064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu{ 12834064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu GET_CURRENT_CONTEXT(ctx); 12934064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu draw_texture(ctx, 13034064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu (GLfloat) coords[0] / 65536.0f, 13134064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu (GLfloat) coords[1] / 65536.0f, 13234064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu (GLfloat) coords[2] / 65536.0f, 13334064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu (GLfloat) coords[3] / 65536.0f, 13434064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu (GLfloat) coords[4] / 65536.0f); 13534064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu} 13634064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu 13734064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu#endif /* FEATURE_OES_draw_texture */ 138