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