rs_graphics.rsh revision e227f9a1a3f2475002e0ca40342ddb979ba36752
19996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/* 2f8e195ee50ac7b01fc0130af6634afe475d2deaeAlex Sakhartchouk * Copyright (C) 2011-2012 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 18e227f9a1a3f2475002e0ca40342ddb979ba36752Stephen Hines * \brief RenderScript graphics API 199996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * 20e227f9a1a3f2475002e0ca40342ddb979ba36752Stephen Hines * A set of graphics functions used by RenderScript. 219996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * 229996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */ 231b937f5c0d66a65daf07a45554c98a9f2481b9baJason Sams#ifndef __RS_GRAPHICS_RSH__ 241b937f5c0d66a65daf07a45554c98a9f2481b9baJason Sams#define __RS_GRAPHICS_RSH__ 255909d26c633a5ac00c85d72ee4a035612a6a15deAlex Sakhartchouk 26f8e195ee50ac7b01fc0130af6634afe475d2deaeAlex Sakhartchouk#include "rs_mesh.rsh" 27f8e195ee50ac7b01fc0130af6634afe475d2deaeAlex Sakhartchouk#include "rs_program.rsh" 28f8e195ee50ac7b01fc0130af6634afe475d2deaeAlex Sakhartchouk 294325387cee36fe373b1a792fb2e65ef00535bbddAlex Sakhartchouk#if (defined(RS_VERSION) && (RS_VERSION >= 14)) 307d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk/** 317d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * Set the color target used for all subsequent rendering calls 327d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * @param colorTarget 337d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * @param slot 347d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk */ 357d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchoukextern void __attribute__((overloadable)) 367d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk rsgBindColorTarget(rs_allocation colorTarget, uint slot); 377d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk 387d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk/** 397d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * Clear the previously set color target 407d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * @param slot 417d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk */ 427d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchoukextern void __attribute__((overloadable)) 437d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk rsgClearColorTarget(uint slot); 447d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk 457d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk/** 467d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * Set the depth target used for all subsequent rendering calls 477d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * @param depthTarget 487d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk */ 497d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchoukextern void __attribute__((overloadable)) 507d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk rsgBindDepthTarget(rs_allocation depthTarget); 517d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk 527d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk/** 537d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * Clear the previously set depth target 547d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk */ 557d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchoukextern void __attribute__((overloadable)) 567d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk rsgClearDepthTarget(void); 577d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk 587d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk/** 597d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * Clear all color and depth targets and resume rendering into 607d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * the framebuffer 617d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk */ 627d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchoukextern void __attribute__((overloadable)) 637d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk rsgClearAllRenderTargets(void); 647d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk 657d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk/** 66e227f9a1a3f2475002e0ca40342ddb979ba36752Stephen Hines * Force RenderScript to finish all rendering commands 677d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk */ 687d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchoukextern uint __attribute__((overloadable)) 697d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk rsgFinish(void); 7009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 714325387cee36fe373b1a792fb2e65ef00535bbddAlex Sakhartchouk#endif //defined(RS_VERSION) && (RS_VERSION >= 14) 724325387cee36fe373b1a792fb2e65ef00535bbddAlex Sakhartchouk 7309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 7409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Bind a new ProgramFragment to the rendering context. 7509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 7609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param pf 7709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 787349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 7909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams rsgBindProgramFragment(rs_program_fragment pf); 8009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 8109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 8209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Bind a new ProgramStore to the rendering context. 8309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 8409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param ps 8509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 867349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 8709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams rsgBindProgramStore(rs_program_store ps); 8809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 8909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 9009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Bind a new ProgramVertex to the rendering context. 9109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 9209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param pv 9309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 947349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 9509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams rsgBindProgramVertex(rs_program_vertex pv); 9609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 9709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 9809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Bind a new ProgramRaster to the rendering context. 9909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 10009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param pr 10109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 1027349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 10309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams rsgBindProgramRaster(rs_program_raster pr); 104f2bcce71dc7a2328355ce779028904772a85cc5fJason Sams 10509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 10609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Bind a new Sampler object to a ProgramFragment. The sampler will 10709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * operate on the texture bound at the matching slot. 10809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 10909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param slot 11009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 1117349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 1127349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsgBindSampler(rs_program_fragment, uint slot, rs_sampler); 11309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 11409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 11509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Bind a new Allocation object to a ProgramFragment. The 11609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Allocation must be a valid texture for the Program. The sampling 11709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * of the texture will be controled by the Sampler bound at the 11809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * matching slot. 11909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 12009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param slot 12109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 1227349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 1237349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsgBindTexture(rs_program_fragment, uint slot, rs_allocation); 12451f36ab783316b1c036bab4c3f7e0934dd564bd7Jason Sams 1259996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/** 1269996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Load the projection matrix for a currently bound fixed function 1279996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * vertex program. Calling this function with a custom vertex shader 1289996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * would result in an error. 1299996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param proj projection matrix 1309996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */ 1317349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 1329996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk rsgProgramVertexLoadProjectionMatrix(const rs_matrix4x4 *proj); 1339996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/** 1349996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Load the model matrix for a currently bound fixed function 1359996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * vertex program. Calling this function with a custom vertex shader 1369996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * would result in an error. 1379996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param model model matrix 1389996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */ 1397349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 1409996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk rsgProgramVertexLoadModelMatrix(const rs_matrix4x4 *model); 1419996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/** 1429996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Load the texture matrix for a currently bound fixed function 1439996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * vertex program. Calling this function with a custom vertex shader 1449996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * would result in an error. 1459996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param tex texture matrix 1469996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */ 1477349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 1489996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk rsgProgramVertexLoadTextureMatrix(const rs_matrix4x4 *tex); 1499996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/** 1509996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Get the projection matrix for a currently bound fixed function 1519996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * vertex program. Calling this function with a custom vertex shader 1529996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * would result in an error. 1539996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param proj matrix to store the current projection matrix into 1549996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */ 1556445e5210c6d7f8689e94be9026153d017c9545bJason Samsextern void __attribute__((overloadable)) 1569996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk rsgProgramVertexGetProjectionMatrix(rs_matrix4x4 *proj); 15795333f998fd4a983f89e5128e85f6f710d200bd9Alex Sakhartchouk 15809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 15909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Set the constant color for a fixed function emulation program. 16009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 16109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param pf 16209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param r 16309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param g 16409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param b 16509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param a 16609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 16795333f998fd4a983f89e5128e85f6f710d200bd9Alex Sakhartchoukextern void __attribute__((overloadable)) 16809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams rsgProgramFragmentConstantColor(rs_program_fragment pf, float r, float g, float b, float a); 1696445e5210c6d7f8689e94be9026153d017c9545bJason Sams 17009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 171a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk * Bind a new Allocation object to a ProgramFragment. The 172a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk * Allocation must be a valid constant input for the Program. 173a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk * 174a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk * @param ps program object 175a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk * @param slot index of the constant buffer on the program 176a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk * @param c constants to bind 177a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk */ 178a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchoukextern void __attribute__((overloadable)) 179a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk rsgBindConstant(rs_program_fragment ps, uint slot, rs_allocation c); 180a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk 181a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk/** 182a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk * Bind a new Allocation object to a ProgramVertex. The 183a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk * Allocation must be a valid constant input for the Program. 184a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk * 185a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk * @param pv program object 186a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk * @param slot index of the constant buffer on the program 187a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk * @param c constants to bind 188a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk */ 189a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchoukextern void __attribute__((overloadable)) 190a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk rsgBindConstant(rs_program_vertex pv, uint slot, rs_allocation c); 191a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk 192a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk/** 19309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Get the width of the current rendering surface. 19409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 19509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @return uint 19609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 1977349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern uint __attribute__((overloadable)) 1987349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsgGetWidth(void); 19909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 20009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 20109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Get the height of the current rendering surface. 20209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 20309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @return uint 20409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 2057349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern uint __attribute__((overloadable)) 2067349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsgGetHeight(void); 20751f36ab783316b1c036bab4c3f7e0934dd564bd7Jason Sams 20809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 20909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 21009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Sync the contents of an allocation from its SCRIPT memory space to its HW 21109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * memory spaces. 21209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 21309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param alloc 21409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 2157349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 21609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams rsgAllocationSyncAll(rs_allocation alloc); 217b7e83bda41e66c966b98935b44140692bfe0c4caJason Sams 2184325387cee36fe373b1a792fb2e65ef00535bbddAlex Sakhartchouk#if (defined(RS_VERSION) && (RS_VERSION >= 14)) 2194325387cee36fe373b1a792fb2e65ef00535bbddAlex Sakhartchouk 22009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 22174a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * Sync the contents of an allocation from memory space 22274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * specified by source. 22374a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * 22474a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * @param alloc 22574a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * @param source 22674a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk */ 22774a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchoukextern void __attribute__((overloadable)) 22874a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk rsgAllocationSyncAll(rs_allocation alloc, 22974a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk rs_allocation_usage_type source); 23074a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk 2314325387cee36fe373b1a792fb2e65ef00535bbddAlex Sakhartchouk#endif //defined(RS_VERSION) && (RS_VERSION >= 14) 2324325387cee36fe373b1a792fb2e65ef00535bbddAlex Sakhartchouk 23374a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk/** 23409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Low performance utility function for drawing a simple rectangle. Not 23509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * intended for drawing large quantities of geometry. 23609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 23709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param x1 23809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param y1 23909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param x2 24009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param y2 24109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param z 24209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 243b7e83bda41e66c966b98935b44140692bfe0c4caJason Samsextern void __attribute__((overloadable)) 2447349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsgDrawRect(float x1, float y1, float x2, float y2, float z); 24509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 24609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 24709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Low performance utility function for drawing a simple quad. Not intended for 24809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * drawing large quantities of geometry. 24909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 25009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param x1 25109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param y1 25209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param z1 25309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param x2 25409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param y2 25509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param z2 25609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param x3 25709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param y3 25809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param z3 25909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param x4 26009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param y4 26109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param z4 26209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 2637349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 2647349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsgDrawQuad(float x1, float y1, float z1, 2657349547db61d2d458b31c074b902d56d082e5d84Jason Sams float x2, float y2, float z2, 2667349547db61d2d458b31c074b902d56d082e5d84Jason Sams float x3, float y3, float z3, 2677349547db61d2d458b31c074b902d56d082e5d84Jason Sams float x4, float y4, float z4); 26809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 26909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 27009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 27109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Low performance utility function for drawing a textured quad. Not intended 27209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * for drawing large quantities of geometry. 27309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 27409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param x1 27509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param y1 27609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param z1 27709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param u1 27809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param v1 27909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param x2 28009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param y2 28109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param z2 28209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param u2 28309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param v2 28409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param x3 28509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param y3 28609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param z3 28709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param u3 28809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param v3 28909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param x4 29009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param y4 29109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param z4 29209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param u4 29309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param v4 29409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 2957349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 2967349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsgDrawQuadTexCoords(float x1, float y1, float z1, float u1, float v1, 2977349547db61d2d458b31c074b902d56d082e5d84Jason Sams float x2, float y2, float z2, float u2, float v2, 2987349547db61d2d458b31c074b902d56d082e5d84Jason Sams float x3, float y3, float z3, float u3, float v3, 2997349547db61d2d458b31c074b902d56d082e5d84Jason Sams float x4, float y4, float z4, float u4, float v4); 30009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 30109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 30209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 30309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Low performance function for drawing rectangles in screenspace. This 30409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * function uses the default passthough ProgramVertex. Any bound ProgramVertex 30509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * is ignored. This function has considerable overhead and should not be used 30609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * for drawing in shipping applications. 30709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 30809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param x 30909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param y 31009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param z 31109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param w 31209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param h 31309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 3147349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 3157349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsgDrawSpriteScreenspace(float x, float y, float z, float w, float h); 31651f36ab783316b1c036bab4c3f7e0934dd564bd7Jason Sams 3179e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Samsextern void __attribute__((overloadable)) 3189e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams rsgDrawPath(rs_path p); 3199e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams 32009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 3219996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Draw a mesh using the current context state. The whole mesh is 32209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * rendered. 32309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 32409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param ism 32509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 3267349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 3277349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsgDrawMesh(rs_mesh ism); 3289996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/** 3299996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Draw part of a mesh using the current context state. 3309996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param ism mesh object to render 3319996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param primitiveIndex for meshes that contain multiple primitive groups 3329996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * this parameter specifies the index of the group to draw. 3339996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */ 3347349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 3357349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsgDrawMesh(rs_mesh ism, uint primitiveIndex); 3369996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/** 3379996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Draw specified index range of part of a mesh using the current context state. 3389996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param ism mesh object to render 3399996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param primitiveIndex for meshes that contain multiple primitive groups 3409996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * this parameter specifies the index of the group to draw. 3419996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param start starting index in the range 3429996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param len number of indices to draw 3439996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */ 3447349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 3457349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsgDrawMesh(rs_mesh ism, uint primitiveIndex, uint start, uint len); 3464e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk 34709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 34809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Clears the rendering surface to the specified color. 34909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 35009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param r 35109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param g 35209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param b 35309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param a 35409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 3557349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 35609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams rsgClearColor(float r, float g, float b, float a); 35709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 35809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 35909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Clears the depth suface to the specified value. 36009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 3617349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 36209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams rsgClearDepth(float value); 3639996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/** 3649996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Draws text given a string and location 3659996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */ 3667349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 3677349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsgDrawText(const char *, int x, int y); 3689996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/** 3699996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * \overload 3709996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */ 3717349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 3727349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsgDrawText(rs_allocation, int x, int y); 3739996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/** 3749996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Binds the font object to be used for all subsequent font rendering calls 3759996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param font object to bind 3769996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */ 3777349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 3789996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk rsgBindFont(rs_font font); 3799996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/** 3809996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Sets the font color for all subsequent rendering calls 3819996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param r red component 3829996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param g green component 3839996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param b blue component 3849996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param a alpha component 3859996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */ 3869fc9f0375a92fe22fecb3782b18a5c6060a07290Alex Sakhartchoukextern void __attribute__((overloadable)) 3879996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk rsgFontColor(float r, float g, float b, float a); 3889996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/** 3899996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Returns the bounding box of the text relative to (0, 0) 3909996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Any of left, right, top, bottom could be NULL 3919996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */ 39209c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchoukextern void __attribute__((overloadable)) 39309c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk rsgMeasureText(const char *, int *left, int *right, int *top, int *bottom); 3949996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/** 3959996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * \overload 3969996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */ 39709c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchoukextern void __attribute__((overloadable)) 39809c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk rsgMeasureText(rs_allocation, int *left, int *right, int *top, int *bottom); 3999996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/** 4009996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Computes an axis aligned bounding box of a mesh object 4019996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */ 402ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchoukextern void __attribute__((overloadable)) 403ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk rsgMeshComputeBoundingBox(rs_mesh mesh, float *minX, float *minY, float *minZ, 404ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk float *maxX, float *maxY, float *maxZ); 4059996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/** 4069996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * \overload 4079996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */ 408399dc9ef2886a6c317a4c3c44173d582c5bc7d99Jason Sams__inline__ static void __attribute__((overloadable, always_inline)) 409ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex SakhartchoukrsgMeshComputeBoundingBox(rs_mesh mesh, float3 *bBoxMin, float3 *bBoxMax) { 410ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk float x1, y1, z1, x2, y2, z2; 411ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk rsgMeshComputeBoundingBox(mesh, &x1, &y1, &z1, &x2, &y2, &z2); 412ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk bBoxMin->x = x1; 413ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk bBoxMin->y = y1; 414ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk bBoxMin->z = z1; 415ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk bBoxMax->x = x2; 416ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk bBoxMax->y = y2; 417ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk bBoxMax->z = z2; 418ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk} 419ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk 4201b937f5c0d66a65daf07a45554c98a9f2481b9baJason Sams#endif 42151f36ab783316b1c036bab4c3f7e0934dd564bd7Jason Sams 422