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 263ff0fe77fdba8ad4a920dc27157d8c1786bb3661Jason Sams#ifdef __LP64__ 273ff0fe77fdba8ad4a920dc27157d8c1786bb3661Jason Sams//#error "RenderScript graphics is deprecated and not supported in 64bit mode." 283ff0fe77fdba8ad4a920dc27157d8c1786bb3661Jason Sams#else 293ff0fe77fdba8ad4a920dc27157d8c1786bb3661Jason Sams 30f8e195ee50ac7b01fc0130af6634afe475d2deaeAlex Sakhartchouk#include "rs_mesh.rsh" 31f8e195ee50ac7b01fc0130af6634afe475d2deaeAlex Sakhartchouk#include "rs_program.rsh" 32f8e195ee50ac7b01fc0130af6634afe475d2deaeAlex Sakhartchouk 334325387cee36fe373b1a792fb2e65ef00535bbddAlex Sakhartchouk#if (defined(RS_VERSION) && (RS_VERSION >= 14)) 347d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk/** 357d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * Set the color target used for all subsequent rendering calls 367d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * @param colorTarget 377d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * @param slot 387d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk */ 397d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchoukextern void __attribute__((overloadable)) 407d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk rsgBindColorTarget(rs_allocation colorTarget, uint slot); 417d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk 427d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk/** 437d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * Clear the previously set color target 447d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * @param slot 457d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk */ 467d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchoukextern void __attribute__((overloadable)) 477d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk rsgClearColorTarget(uint slot); 487d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk 497d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk/** 507d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * Set the depth target used for all subsequent rendering calls 517d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * @param depthTarget 527d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk */ 537d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchoukextern void __attribute__((overloadable)) 547d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk rsgBindDepthTarget(rs_allocation depthTarget); 557d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk 567d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk/** 577d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * Clear the previously set depth target 587d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk */ 597d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchoukextern void __attribute__((overloadable)) 607d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk rsgClearDepthTarget(void); 617d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk 627d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk/** 637d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * Clear all color and depth targets and resume rendering into 647d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * the framebuffer 657d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk */ 667d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchoukextern void __attribute__((overloadable)) 677d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk rsgClearAllRenderTargets(void); 687d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk 697d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk/** 70e227f9a1a3f2475002e0ca40342ddb979ba36752Stephen Hines * Force RenderScript to finish all rendering commands 717d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk */ 727d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchoukextern uint __attribute__((overloadable)) 737d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk rsgFinish(void); 7409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 754325387cee36fe373b1a792fb2e65ef00535bbddAlex Sakhartchouk#endif //defined(RS_VERSION) && (RS_VERSION >= 14) 764325387cee36fe373b1a792fb2e65ef00535bbddAlex Sakhartchouk 7709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 7809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Bind a new ProgramFragment to the rendering context. 7909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 8009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param pf 8109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 827349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 8309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams rsgBindProgramFragment(rs_program_fragment pf); 8409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 8509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 8609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Bind a new ProgramStore to the rendering context. 8709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 8809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param ps 8909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 907349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 9109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams rsgBindProgramStore(rs_program_store ps); 9209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 9309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 9409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Bind a new ProgramVertex to the rendering context. 9509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 9609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param pv 9709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 987349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 9909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams rsgBindProgramVertex(rs_program_vertex pv); 10009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 10109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 10209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Bind a new ProgramRaster to the rendering context. 10309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 10409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param pr 10509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 1067349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 10709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams rsgBindProgramRaster(rs_program_raster pr); 108f2bcce71dc7a2328355ce779028904772a85cc5fJason Sams 10909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 11009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Bind a new Sampler object to a ProgramFragment. The sampler will 11109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * operate on the texture bound at the matching slot. 11209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 11309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param slot 11409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 1157349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 1167349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsgBindSampler(rs_program_fragment, uint slot, rs_sampler); 11709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 11809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 11909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Bind a new Allocation object to a ProgramFragment. The 12009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Allocation must be a valid texture for the Program. The sampling 12109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * of the texture will be controled by the Sampler bound at the 12209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * matching slot. 12309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 12409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param slot 12509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 1267349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 1277349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsgBindTexture(rs_program_fragment, uint slot, rs_allocation); 12851f36ab783316b1c036bab4c3f7e0934dd564bd7Jason Sams 1299996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/** 1309996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Load the projection matrix for a currently bound fixed function 1319996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * vertex program. Calling this function with a custom vertex shader 1329996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * would result in an error. 1339996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param proj projection matrix 1349996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */ 1357349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 1369996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk rsgProgramVertexLoadProjectionMatrix(const rs_matrix4x4 *proj); 1379996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/** 1389996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Load the model matrix for a currently bound fixed function 1399996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * vertex program. Calling this function with a custom vertex shader 1409996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * would result in an error. 1419996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param model model matrix 1429996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */ 1437349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 1449996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk rsgProgramVertexLoadModelMatrix(const rs_matrix4x4 *model); 1459996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/** 1469996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Load the texture matrix for a currently bound fixed function 1479996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * vertex program. Calling this function with a custom vertex shader 1489996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * would result in an error. 1499996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param tex texture matrix 1509996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */ 1517349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 1529996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk rsgProgramVertexLoadTextureMatrix(const rs_matrix4x4 *tex); 1539996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/** 1549996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Get the projection matrix for a currently bound fixed function 1559996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * vertex program. Calling this function with a custom vertex shader 1569996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * would result in an error. 1579996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param proj matrix to store the current projection matrix into 1589996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */ 1596445e5210c6d7f8689e94be9026153d017c9545bJason Samsextern void __attribute__((overloadable)) 1609996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk rsgProgramVertexGetProjectionMatrix(rs_matrix4x4 *proj); 16195333f998fd4a983f89e5128e85f6f710d200bd9Alex Sakhartchouk 16209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 16309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Set the constant color for a fixed function emulation program. 16409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 16509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param pf 16609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param r 16709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param g 16809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param b 16909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param a 17009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 17195333f998fd4a983f89e5128e85f6f710d200bd9Alex Sakhartchoukextern void __attribute__((overloadable)) 17209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams rsgProgramFragmentConstantColor(rs_program_fragment pf, float r, float g, float b, float a); 1736445e5210c6d7f8689e94be9026153d017c9545bJason Sams 17409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 175a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk * Bind a new Allocation object to a ProgramFragment. The 176a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk * Allocation must be a valid constant input for the Program. 177a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk * 178a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk * @param ps program object 179a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk * @param slot index of the constant buffer on the program 180a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk * @param c constants to bind 181a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk */ 182a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchoukextern void __attribute__((overloadable)) 183a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk rsgBindConstant(rs_program_fragment ps, uint slot, rs_allocation c); 184a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk 185a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk/** 186a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk * Bind a new Allocation object to a ProgramVertex. The 187a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk * Allocation must be a valid constant input for the Program. 188a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk * 189a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk * @param pv program object 190a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk * @param slot index of the constant buffer on the program 191a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk * @param c constants to bind 192a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk */ 193a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchoukextern void __attribute__((overloadable)) 194a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk rsgBindConstant(rs_program_vertex pv, uint slot, rs_allocation c); 195a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk 196a720a144508edd91e4790b23eadd6cd270368df9Alex Sakhartchouk/** 19709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Get the width of the current rendering surface. 19809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 19909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @return uint 20009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 2017349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern uint __attribute__((overloadable)) 2027349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsgGetWidth(void); 20309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 20409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 20509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Get the height of the current rendering surface. 20609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 20709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @return uint 20809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 2097349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern uint __attribute__((overloadable)) 2107349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsgGetHeight(void); 21151f36ab783316b1c036bab4c3f7e0934dd564bd7Jason Sams 21209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 21309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 21409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Sync the contents of an allocation from its SCRIPT memory space to its HW 21509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * memory spaces. 21609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 21709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param alloc 21809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 2197349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 22009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams rsgAllocationSyncAll(rs_allocation alloc); 221b7e83bda41e66c966b98935b44140692bfe0c4caJason Sams 2224325387cee36fe373b1a792fb2e65ef00535bbddAlex Sakhartchouk#if (defined(RS_VERSION) && (RS_VERSION >= 14)) 2234325387cee36fe373b1a792fb2e65ef00535bbddAlex Sakhartchouk 22409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 22574a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * Sync the contents of an allocation from memory space 22674a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * specified by source. 22774a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * 22874a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * @param alloc 22974a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * @param source 23074a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk */ 23174a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchoukextern void __attribute__((overloadable)) 23274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk rsgAllocationSyncAll(rs_allocation alloc, 23374a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk rs_allocation_usage_type source); 23474a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk 2354325387cee36fe373b1a792fb2e65ef00535bbddAlex Sakhartchouk#endif //defined(RS_VERSION) && (RS_VERSION >= 14) 2364325387cee36fe373b1a792fb2e65ef00535bbddAlex Sakhartchouk 23774a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk/** 23809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Low performance utility function for drawing a simple rectangle. Not 23909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * intended for drawing large quantities of geometry. 24009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 24109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param x1 24209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param y1 24309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param x2 24409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param y2 24509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param z 24609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 247b7e83bda41e66c966b98935b44140692bfe0c4caJason Samsextern void __attribute__((overloadable)) 2487349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsgDrawRect(float x1, float y1, float x2, float y2, float z); 24909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 25009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 25109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Low performance utility function for drawing a simple quad. Not intended for 25209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * drawing large quantities of geometry. 25309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 25409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param x1 25509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param y1 25609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param z1 25709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param x2 25809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param y2 25909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param z2 26009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param x3 26109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param y3 26209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param z3 26309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param x4 26409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param y4 26509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param z4 26609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 2677349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 2687349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsgDrawQuad(float x1, float y1, float z1, 2697349547db61d2d458b31c074b902d56d082e5d84Jason Sams float x2, float y2, float z2, 2707349547db61d2d458b31c074b902d56d082e5d84Jason Sams float x3, float y3, float z3, 2717349547db61d2d458b31c074b902d56d082e5d84Jason Sams float x4, float y4, float z4); 27209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 27309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 27409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 27509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Low performance utility function for drawing a textured quad. Not intended 27609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * for drawing large quantities of geometry. 27709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 27809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param x1 27909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param y1 28009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param z1 28109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param u1 28209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param v1 28309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param x2 28409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param y2 28509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param z2 28609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param u2 28709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param v2 28809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param x3 28909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param y3 29009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param z3 29109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param u3 29209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param v3 29309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param x4 29409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param y4 29509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param z4 29609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param u4 29709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param v4 29809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 2997349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 3007349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsgDrawQuadTexCoords(float x1, float y1, float z1, float u1, float v1, 3017349547db61d2d458b31c074b902d56d082e5d84Jason Sams float x2, float y2, float z2, float u2, float v2, 3027349547db61d2d458b31c074b902d56d082e5d84Jason Sams float x3, float y3, float z3, float u3, float v3, 3037349547db61d2d458b31c074b902d56d082e5d84Jason Sams float x4, float y4, float z4, float u4, float v4); 30409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 30509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 30609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 30709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Low performance function for drawing rectangles in screenspace. This 30809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * function uses the default passthough ProgramVertex. Any bound ProgramVertex 30909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * is ignored. This function has considerable overhead and should not be used 31009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * for drawing in shipping applications. 31109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 31209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param x 31309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param y 31409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param z 31509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param w 31609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param h 31709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 3187349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 3197349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsgDrawSpriteScreenspace(float x, float y, float z, float w, float h); 32051f36ab783316b1c036bab4c3f7e0934dd564bd7Jason Sams 3219e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Samsextern void __attribute__((overloadable)) 3229e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams rsgDrawPath(rs_path p); 3239e0afb5a2b3e476c42a373e7cd89cef4a34f8195Jason Sams 32409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 3259996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Draw a mesh using the current context state. The whole mesh is 32609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * rendered. 32709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 32809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param ism 32909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 3307349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 3317349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsgDrawMesh(rs_mesh ism); 3329996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/** 3339996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Draw part of a mesh using the current context state. 3349996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param ism mesh object to render 3359996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param primitiveIndex for meshes that contain multiple primitive groups 3369996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * this parameter specifies the index of the group to draw. 3379996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */ 3387349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 3397349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsgDrawMesh(rs_mesh ism, uint primitiveIndex); 3409996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/** 3419996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Draw specified index range of part of a mesh using the current context state. 3429996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param ism mesh object to render 3439996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param primitiveIndex for meshes that contain multiple primitive groups 3449996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * this parameter specifies the index of the group to draw. 3459996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param start starting index in the range 3469996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param len number of indices to draw 3479996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */ 3487349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 3497349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsgDrawMesh(rs_mesh ism, uint primitiveIndex, uint start, uint len); 3504e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk 35109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 35209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Clears the rendering surface to the specified color. 35309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 35409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param r 35509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param g 35609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param b 35709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @param a 35809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 3597349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 36009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams rsgClearColor(float r, float g, float b, float a); 36109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 36209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 36309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Clears the depth suface to the specified value. 36409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 3657349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 36609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams rsgClearDepth(float value); 3679996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/** 3689996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Draws text given a string and location 3699996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */ 3707349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 3717349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsgDrawText(const char *, int x, int y); 3729996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/** 3739996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * \overload 3749996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */ 3757349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 3767349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsgDrawText(rs_allocation, int x, int y); 3779996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/** 3789996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Binds the font object to be used for all subsequent font rendering calls 3799996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param font object to bind 3809996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */ 3817349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 3829996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk rsgBindFont(rs_font font); 3839996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/** 3849996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Sets the font color for all subsequent rendering calls 3859996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param r red component 3869996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param g green component 3879996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param b blue component 3889996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * @param a alpha component 3899996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */ 3909fc9f0375a92fe22fecb3782b18a5c6060a07290Alex Sakhartchoukextern void __attribute__((overloadable)) 3919996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk rsgFontColor(float r, float g, float b, float a); 3929996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/** 3939996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Returns the bounding box of the text relative to (0, 0) 3949996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Any of left, right, top, bottom could be NULL 3959996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */ 39609c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchoukextern void __attribute__((overloadable)) 39709c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk rsgMeasureText(const char *, int *left, int *right, int *top, int *bottom); 3989996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/** 3999996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * \overload 4009996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */ 40109c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchoukextern void __attribute__((overloadable)) 40209c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk rsgMeasureText(rs_allocation, int *left, int *right, int *top, int *bottom); 4039996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/** 4049996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * Computes an axis aligned bounding box of a mesh object 4059996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */ 406ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchoukextern void __attribute__((overloadable)) 407ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk rsgMeshComputeBoundingBox(rs_mesh mesh, float *minX, float *minY, float *minZ, 408ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk float *maxX, float *maxY, float *maxZ); 4099996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk/** 4109996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk * \overload 4119996b757c31fe81c0892d5e43e611be44dab16c1Alex Sakhartchouk */ 412399dc9ef2886a6c317a4c3c44173d582c5bc7d99Jason Sams__inline__ static void __attribute__((overloadable, always_inline)) 413ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex SakhartchoukrsgMeshComputeBoundingBox(rs_mesh mesh, float3 *bBoxMin, float3 *bBoxMax) { 414ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk float x1, y1, z1, x2, y2, z2; 415ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk rsgMeshComputeBoundingBox(mesh, &x1, &y1, &z1, &x2, &y2, &z2); 416ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk bBoxMin->x = x1; 417ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk bBoxMin->y = y1; 418ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk bBoxMin->z = z1; 419ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk bBoxMax->x = x2; 420ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk bBoxMax->y = y2; 421ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk bBoxMax->z = z2; 422ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk} 423ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk 4243ff0fe77fdba8ad4a920dc27157d8c1786bb3661Jason Sams#endif //__LP64__ 4251b937f5c0d66a65daf07a45554c98a9f2481b9baJason Sams#endif 42651f36ab783316b1c036bab4c3f7e0934dd564bd7Jason Sams 427