blob: af84461a86b42e5b6a7f93c1b810d58287e0598d [file] [log] [blame]
#
# Copyright (C) 2015 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
header:
summary: TODO Add documentation
description:
TODO Add documentation
end:
function: rsClamp
# TODO Why always_inline?
attrib: const, always_inline
t: i8, i16, i32, u8, u16, u32
ret: #1
arg: #1 amount, "The value to clamp"
arg: #1 low, "Lower bound"
arg: #1 high, "Upper bound"
summary: Restrain a value to a range
description:
Clamp a value between low and high.
Deprecated. Use @clamp() instead.
test: none
end:
function: rsExtractFrustumPlanes
# TODO Why always_inline?
attrib: always_inline
ret: void
arg: const rs_matrix4x4* viewProj, "matrix to extract planes from"
arg: float4* left, "left plane"
arg: float4* right, "right plane"
arg: float4* top, "top plane"
arg: float4* bottom, "bottom plane"
arg: float4* near, "near plane"
arg: float4* far, "far plane"
summary:
description:
Computes 6 frustum planes from the view projection matrix
inline:
// x y z w = a b c d in the plane equation
left->x = viewProj->m[3] + viewProj->m[0];
left->y = viewProj->m[7] + viewProj->m[4];
left->z = viewProj->m[11] + viewProj->m[8];
left->w = viewProj->m[15] + viewProj->m[12];
right->x = viewProj->m[3] - viewProj->m[0];
right->y = viewProj->m[7] - viewProj->m[4];
right->z = viewProj->m[11] - viewProj->m[8];
right->w = viewProj->m[15] - viewProj->m[12];
top->x = viewProj->m[3] - viewProj->m[1];
top->y = viewProj->m[7] - viewProj->m[5];
top->z = viewProj->m[11] - viewProj->m[9];
top->w = viewProj->m[15] - viewProj->m[13];
bottom->x = viewProj->m[3] + viewProj->m[1];
bottom->y = viewProj->m[7] + viewProj->m[5];
bottom->z = viewProj->m[11] + viewProj->m[9];
bottom->w = viewProj->m[15] + viewProj->m[13];
near->x = viewProj->m[3] + viewProj->m[2];
near->y = viewProj->m[7] + viewProj->m[6];
near->z = viewProj->m[11] + viewProj->m[10];
near->w = viewProj->m[15] + viewProj->m[14];
far->x = viewProj->m[3] - viewProj->m[2];
far->y = viewProj->m[7] - viewProj->m[6];
far->z = viewProj->m[11] - viewProj->m[10];
far->w = viewProj->m[15] - viewProj->m[14];
float len = length(left->xyz);
*left /= len;
len = length(right->xyz);
*right /= len;
len = length(top->xyz);
*top /= len;
len = length(bottom->xyz);
*bottom /= len;
len = length(near->xyz);
*near /= len;
len = length(far->xyz);
*far /= len;
test: none
end:
function: rsFrac
attrib: const
ret: float
arg: float v
summary:
description:
Returns the fractional part of a float
test: none
end:
function: rsIsSphereInFrustum
attrib: always_inline
ret: bool
arg: float4* sphere, "float4 representing the sphere"
arg: float4* left, "left plane"
arg: float4* right, "right plane"
arg: float4* top, "top plane"
arg: float4* bottom, "bottom plane"
arg: float4* near, "near plane"
arg: float4* far, "far plane"
summary:
description:
Checks if a sphere is withing the 6 frustum planes
inline:
float distToCenter = dot(left->xyz, sphere->xyz) + left->w;
if (distToCenter < -sphere->w) {
return false;
}
distToCenter = dot(right->xyz, sphere->xyz) + right->w;
if (distToCenter < -sphere->w) {
return false;
}
distToCenter = dot(top->xyz, sphere->xyz) + top->w;
if (distToCenter < -sphere->w) {
return false;
}
distToCenter = dot(bottom->xyz, sphere->xyz) + bottom->w;
if (distToCenter < -sphere->w) {
return false;
}
distToCenter = dot(near->xyz, sphere->xyz) + near->w;
if (distToCenter < -sphere->w) {
return false;
}
distToCenter = dot(far->xyz, sphere->xyz) + far->w;
if (distToCenter < -sphere->w) {
return false;
}
return true;
test: none
end:
function: rsPackColorTo8888
attrib: const
ret: uchar4
arg: float r
arg: float g
arg: float b
summary:
description:
Pack floating point (0-1) RGB values into a uchar4.
For the float3 variant and the variant that only specifies r, g, b,
the alpha component is set to 255 (1.0).
test: none
end:
function: rsPackColorTo8888
attrib: const
ret: uchar4
arg: float r
arg: float g
arg: float b
arg: float a
test: none
end:
function: rsPackColorTo8888
attrib: const
ret: uchar4
arg: float3 color
test: none
end:
function: rsPackColorTo8888
attrib: const
ret: uchar4
arg: float4 color
test: none
end:
function: rsRand
ret: int
arg: int max_value
summary:
description:
Return a random value between 0 (or min_value) and max_malue.
test: none
end:
function: rsRand
ret: int
arg: int min_value
arg: int max_value
test: none
end:
function: rsRand
ret: float
arg: float max_value
test: none
end:
function: rsRand
ret: float
arg: float min_value
arg: float max_value
test: none
end:
function: rsUnpackColor8888
attrib: =const
ret: float4
arg: uchar4 c
summary:
description:
Unpack a uchar4 color to float4. The resulting float range will be (0-1).
test: none
end:
function: rsYuvToRGBA_#2#1
attrib: const
w: 4
t: u8, f32
ret: #2#1
arg: uchar y
arg: uchar u
arg: uchar v
summary:
description:
Convert from YUV to RGBA.
test: none
end: