rs_graphics.rsh revision 4325387cee36fe373b1a792fb2e65ef00535bbdd
19996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/* 29996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Copyright (C) 2011 The Android Open Source Project 39996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * 49996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Licensed under the Apache License, Version 2.0 (the "License"); 59996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * you may not use this file except in compliance with the License. 69996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * You may obtain a copy of the License at 79996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * 89996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * http://www.apache.org/licenses/LICENSE-2.0 99996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * 109996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Unless required by applicable law or agreed to in writing, software 119996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * distributed under the License is distributed on an "AS IS" BASIS, 129996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * See the License for the specific language governing permissions and 149996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * limitations under the License. 159996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */ 169996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk 179996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/** @file rs_graphics.rsh 189996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * \brief Renderscript graphics API 199996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * 209996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * A set of graphics functions used by Renderscript. 219996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * 229996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */ 231b937f5c0d66a65daf07a45554c98a9f2481b9baJason Sams#ifndef __RS_GRAPHICS_RSH__ 241b937f5c0d66a65daf07a45554c98a9f2481b9baJason Sams#define __RS_GRAPHICS_RSH__ 251b937f5c0d66a65daf07a45554c98a9f2481b9baJason Sams 264325387cee36fe373b1a792fb2e65ef00535bbddAlex Sakhartchouk#if (defined(RS_VERSION) && (RS_VERSION >= 14)) 277d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk/** 287d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * Set the color target used for all subsequent rendering calls 297d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * @param colorTarget 307d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * @param slot 317d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk */ 327d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchoukextern void __attribute__((overloadable)) 337d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk rsgBindColorTarget(rs_allocation colorTarget, uint slot); 347d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk 357d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk/** 367d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * Clear the previously set color target 377d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * @param slot 387d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk */ 397d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchoukextern void __attribute__((overloadable)) 407d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk rsgClearColorTarget(uint slot); 417d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk 427d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk/** 437d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * Set the depth target used for all subsequent rendering calls 447d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * @param depthTarget 457d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk */ 467d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchoukextern void __attribute__((overloadable)) 477d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk rsgBindDepthTarget(rs_allocation depthTarget); 487d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk 497d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk/** 507d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * Clear the previously set depth target 517d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk */ 527d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchoukextern void __attribute__((overloadable)) 537d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk rsgClearDepthTarget(void); 547d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk 557d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk/** 567d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * Clear all color and depth targets and resume rendering into 577d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * the framebuffer 587d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk */ 597d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchoukextern void __attribute__((overloadable)) 607d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk rsgClearAllRenderTargets(void); 617d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk 627d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk/** 639996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Force Renderscript to finish all rendering commands 647d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk */ 657d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchoukextern uint __attribute__((overloadable)) 667d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk rsgFinish(void); 6709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 684325387cee36fe373b1a792fb2e65ef00535bbddAlex Sakhartchouk#endif //defined(RS_VERSION) && (RS_VERSION >= 14) 694325387cee36fe373b1a792fb2e65ef00535bbddAlex Sakhartchouk 7009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 7109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Bind a new ProgramFragment to the rendering context. 7209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 7309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param pf 7409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 757349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 7609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams rsgBindProgramFragment(rs_program_fragment pf); 7709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 7809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 7909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Bind a new ProgramStore to the rendering context. 8009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 8109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param ps 8209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 837349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 8409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams rsgBindProgramStore(rs_program_store ps); 8509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 8609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 8709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Bind a new ProgramVertex to the rendering context. 8809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 8909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param pv 9009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 917349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 9209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams rsgBindProgramVertex(rs_program_vertex pv); 9309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 9409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 9509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Bind a new ProgramRaster to the rendering context. 9609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 9709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param pr 9809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 997349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 10009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams rsgBindProgramRaster(rs_program_raster pr); 101f2bcce71dc7a2328355ce779028904772a85cc5fJason Sams 10209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 10309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Bind a new Sampler object to a ProgramFragment. The sampler will 10409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * operate on the texture bound at the matching slot. 10509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 10609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param slot 10709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 1087349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 1097349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsgBindSampler(rs_program_fragment, uint slot, rs_sampler); 11009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 11109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 11209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Bind a new Allocation object to a ProgramFragment. The 11309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Allocation must be a valid texture for the Program. The sampling 11409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * of the texture will be controled by the Sampler bound at the 11509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * matching slot. 11609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 11709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param slot 11809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 1197349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 1207349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsgBindTexture(rs_program_fragment, uint slot, rs_allocation); 12151f36ab783316b1c036bab4c3f7e0934dd564bd7Jason Sams 1229996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/** 1239996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Load the projection matrix for a currently bound fixed function 1249996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * vertex program. Calling this function with a custom vertex shader 1259996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * would result in an error. 1269996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param proj projection matrix 1279996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */ 1287349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 1299996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk rsgProgramVertexLoadProjectionMatrix(const rs_matrix4x4 *proj); 1309996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/** 1319996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Load the model matrix for a currently bound fixed function 1329996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * vertex program. Calling this function with a custom vertex shader 1339996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * would result in an error. 1349996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param model model matrix 1359996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */ 1367349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 1379996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk rsgProgramVertexLoadModelMatrix(const rs_matrix4x4 *model); 1389996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/** 1399996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Load the texture matrix for a currently bound fixed function 1409996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * vertex program. Calling this function with a custom vertex shader 1419996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * would result in an error. 1429996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param tex texture matrix 1439996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */ 1447349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 1459996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk rsgProgramVertexLoadTextureMatrix(const rs_matrix4x4 *tex); 1469996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/** 1479996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Get the projection matrix for a currently bound fixed function 1489996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * vertex program. Calling this function with a custom vertex shader 1499996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * would result in an error. 1509996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param proj matrix to store the current projection matrix into 1519996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */ 1526445e5210c6d7f8689e94be9026153d017c9545bJason Samsextern void __attribute__((overloadable)) 1539996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk rsgProgramVertexGetProjectionMatrix(rs_matrix4x4 *proj); 15495333f998fd4a983f89e5128e85f6f710d200bd9Alex Sakhartchouk 15509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 15609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Set the constant color for a fixed function emulation program. 15709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 15809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param pf 15909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param r 16009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param g 16109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param b 16209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param a 16309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 16495333f998fd4a983f89e5128e85f6f710d200bd9Alex Sakhartchoukextern void __attribute__((overloadable)) 16509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams rsgProgramFragmentConstantColor(rs_program_fragment pf, float r, float g, float b, float a); 1666445e5210c6d7f8689e94be9026153d017c9545bJason Sams 16709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 16809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Get the width of the current rendering surface. 16909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 17009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @return uint 17109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 1727349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern uint __attribute__((overloadable)) 1737349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsgGetWidth(void); 17409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 17509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 17609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Get the height of the current rendering surface. 17709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 17809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @return uint 17909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 1807349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern uint __attribute__((overloadable)) 1817349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsgGetHeight(void); 18251f36ab783316b1c036bab4c3f7e0934dd564bd7Jason Sams 18309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 18409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 18509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Sync the contents of an allocation from its SCRIPT memory space to its HW 18609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * memory spaces. 18709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 18809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param alloc 18909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 1907349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 19109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams rsgAllocationSyncAll(rs_allocation alloc); 192b7e83bda41e66c966b98935b44140692bfe0c4caJason Sams 1934325387cee36fe373b1a792fb2e65ef00535bbddAlex Sakhartchouk#if (defined(RS_VERSION) && (RS_VERSION >= 14)) 1944325387cee36fe373b1a792fb2e65ef00535bbddAlex Sakhartchouk 19509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 19674a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * Sync the contents of an allocation from memory space 19774a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * specified by source. 19874a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * 19974a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * @param alloc 20074a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * @param source 20174a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk */ 20274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchoukextern void __attribute__((overloadable)) 20374a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk rsgAllocationSyncAll(rs_allocation alloc, 20474a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk rs_allocation_usage_type source); 20574a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk 2064325387cee36fe373b1a792fb2e65ef00535bbddAlex Sakhartchouk#endif //defined(RS_VERSION) && (RS_VERSION >= 14) 2074325387cee36fe373b1a792fb2e65ef00535bbddAlex Sakhartchouk 20874a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk/** 20909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Low performance utility function for drawing a simple rectangle. Not 21009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * intended for drawing large quantities of geometry. 21109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 21209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param x1 21309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param y1 21409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param x2 21509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param y2 21609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param z 21709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 218b7e83bda41e66c966b98935b44140692bfe0c4caJason Samsextern void __attribute__((overloadable)) 2197349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsgDrawRect(float x1, float y1, float x2, float y2, float z); 22009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 22109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 22209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Low performance utility function for drawing a simple quad. Not intended for 22309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * drawing large quantities of geometry. 22409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 22509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param x1 22609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param y1 22709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param z1 22809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param x2 22909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param y2 23009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param z2 23109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param x3 23209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param y3 23309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param z3 23409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param x4 23509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param y4 23609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param z4 23709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 2387349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 2397349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsgDrawQuad(float x1, float y1, float z1, 2407349547db61d2d458b31c074b902d56d082e5d84Jason Sams float x2, float y2, float z2, 2417349547db61d2d458b31c074b902d56d082e5d84Jason Sams float x3, float y3, float z3, 2427349547db61d2d458b31c074b902d56d082e5d84Jason Sams float x4, float y4, float z4); 24309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 24409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 24509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 24609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Low performance utility function for drawing a textured quad. Not intended 24709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * for drawing large quantities of geometry. 24809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 24909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param x1 25009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param y1 25109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param z1 25209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param u1 25309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param v1 25409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param x2 25509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param y2 25609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param z2 25709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param u2 25809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param v2 25909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param x3 26009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param y3 26109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param z3 26209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param u3 26309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param v3 26409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param x4 26509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param y4 26609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param z4 26709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param u4 26809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param v4 26909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 2707349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 2717349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsgDrawQuadTexCoords(float x1, float y1, float z1, float u1, float v1, 2727349547db61d2d458b31c074b902d56d082e5d84Jason Sams float x2, float y2, float z2, float u2, float v2, 2737349547db61d2d458b31c074b902d56d082e5d84Jason Sams float x3, float y3, float z3, float u3, float v3, 2747349547db61d2d458b31c074b902d56d082e5d84Jason Sams float x4, float y4, float z4, float u4, float v4); 27509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 27609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 27709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 27809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Low performance function for drawing rectangles in screenspace. This 27909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * function uses the default passthough ProgramVertex. Any bound ProgramVertex 28009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * is ignored. This function has considerable overhead and should not be used 28109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * for drawing in shipping applications. 28209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 28309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param x 28409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param y 28509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param z 28609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param w 28709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param h 28809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 2897349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 2907349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsgDrawSpriteScreenspace(float x, float y, float z, float w, float h); 29151f36ab783316b1c036bab4c3f7e0934dd564bd7Jason Sams 29209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 2939996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Draw a mesh using the current context state. The whole mesh is 29409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * rendered. 29509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 29609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param ism 29709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 2987349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 2997349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsgDrawMesh(rs_mesh ism); 3009996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/** 3019996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Draw part of a mesh using the current context state. 3029996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param ism mesh object to render 3039996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param primitiveIndex for meshes that contain multiple primitive groups 3049996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * this parameter specifies the index of the group to draw. 3059996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */ 3067349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 3077349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsgDrawMesh(rs_mesh ism, uint primitiveIndex); 3089996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/** 3099996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Draw specified index range of part of a mesh using the current context state. 3109996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param ism mesh object to render 3119996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param primitiveIndex for meshes that contain multiple primitive groups 3129996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * this parameter specifies the index of the group to draw. 3139996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param start starting index in the range 3149996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param len number of indices to draw 3159996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */ 3167349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 3177349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsgDrawMesh(rs_mesh ism, uint primitiveIndex, uint start, uint len); 3184e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk 31909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 32009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Clears the rendering surface to the specified color. 32109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 32209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param r 32309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param g 32409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param b 32509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param a 32609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 3277349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 32809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams rsgClearColor(float r, float g, float b, float a); 32909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 33009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 33109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Clears the depth suface to the specified value. 33209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 3337349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 33409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams rsgClearDepth(float value); 3359996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/** 3369996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Draws text given a string and location 3379996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */ 3387349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 3397349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsgDrawText(const char *, int x, int y); 3409996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/** 3419996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * \overload 3429996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */ 3437349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 3447349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsgDrawText(rs_allocation, int x, int y); 3459996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/** 3469996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Binds the font object to be used for all subsequent font rendering calls 3479996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param font object to bind 3489996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */ 3497349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 3509996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk rsgBindFont(rs_font font); 3519996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/** 3529996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Sets the font color for all subsequent rendering calls 3539996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param r red component 3549996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param g green component 3559996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param b blue component 3569996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param a alpha component 3579996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */ 3589fc9f0375a92fe22fecb3782b18a5c6060a07290Alex Sakhartchoukextern void __attribute__((overloadable)) 3599996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk rsgFontColor(float r, float g, float b, float a); 3609996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/** 3619996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Returns the bounding box of the text relative to (0, 0) 3629996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Any of left, right, top, bottom could be NULL 3639996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */ 36409c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchoukextern void __attribute__((overloadable)) 36509c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk rsgMeasureText(const char *, int *left, int *right, int *top, int *bottom); 3669996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/** 3679996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * \overload 3689996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */ 36909c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchoukextern void __attribute__((overloadable)) 37009c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk rsgMeasureText(rs_allocation, int *left, int *right, int *top, int *bottom); 3719996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/** 3729996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Computes an axis aligned bounding box of a mesh object 3739996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */ 374ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchoukextern void __attribute__((overloadable)) 375ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk rsgMeshComputeBoundingBox(rs_mesh mesh, float *minX, float *minY, float *minZ, 376ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk float *maxX, float *maxY, float *maxZ); 3779996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/** 3789996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * \overload 3799996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */ 380399dc9ef2886a6c317a4c3c44173d582c5bc7d99Jason Sams__inline__ static void __attribute__((overloadable, always_inline)) 381ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex SakhartchoukrsgMeshComputeBoundingBox(rs_mesh mesh, float3 *bBoxMin, float3 *bBoxMax) { 382ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk float x1, y1, z1, x2, y2, z2; 383ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk rsgMeshComputeBoundingBox(mesh, &x1, &y1, &z1, &x2, &y2, &z2); 384ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk bBoxMin->x = x1; 385ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk bBoxMin->y = y1; 386ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk bBoxMin->z = z1; 387ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk bBoxMax->x = x2; 388ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk bBoxMax->y = y2; 389ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk bBoxMax->z = z2; 390ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk} 391ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk 3921b937f5c0d66a65daf07a45554c98a9f2481b9baJason Sams#endif 39351f36ab783316b1c036bab4c3f7e0934dd564bd7Jason Sams 394