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