panicbit
7 years ago
commit
a5cd55250b
8 changed files with 442 additions and 0 deletions
@ -0,0 +1,8 @@ |
|||||||
|
[package] |
||||||
|
name = "citro3d-sys" |
||||||
|
version = "0.1.0" |
||||||
|
authors = ["panicbit <panicbit.dev@gmail.com>"] |
||||||
|
|
||||||
|
[dependencies] |
||||||
|
libc = "0.2.26" |
||||||
|
ctru-sys = { git = "https://github.com/rust3ds/ctru-rs" } |
@ -0,0 +1,48 @@ |
|||||||
|
#!/usr/bin/env bash |
||||||
|
|
||||||
|
clang_version=$1 |
||||||
|
|
||||||
|
if [ -z "$clang_version" ]; then |
||||||
|
echo " usage: ./bindgen.sh <clang_version>" |
||||||
|
echo "example: ./bindgen.sh 5.0.0" |
||||||
|
echo "Check your current version with \`clang -v\`." |
||||||
|
exit 1 |
||||||
|
fi |
||||||
|
|
||||||
|
set -euxo pipefail |
||||||
|
|
||||||
|
bindgen "$DEVKITPRO/libctru/include/citro3d.h" \ |
||||||
|
--rust-target 1.21 \ |
||||||
|
--use-core \ |
||||||
|
--distrust-clang-mangling \ |
||||||
|
--no-doc-comments \ |
||||||
|
--no-derive-debug \ |
||||||
|
--no-layout-tests \ |
||||||
|
--no-rustfmt-bindings \ |
||||||
|
--ctypes-prefix "::libc" \ |
||||||
|
--no-prepend-enum-name \ |
||||||
|
--generate "functions,types,vars" \ |
||||||
|
--blacklist-type "u(8|16|32|64)" \ |
||||||
|
--blacklist-type "__builtin_va_list" \ |
||||||
|
--blacklist-type "__va_list" \ |
||||||
|
--no-recursive-whitelist \ |
||||||
|
--whitelist-type "C3D_.*" \ |
||||||
|
--whitelist-function "C3D_.*" \ |
||||||
|
--whitelist-var "C3D_.*" \ |
||||||
|
--whitelist-function 'AttrInfo_(Init|AddLoader|AddFixed)' \ |
||||||
|
--whitelist-function 'BufInfo_(Init|Add)' \ |
||||||
|
--whitelist-function 'Mtx_.*' \ |
||||||
|
--raw-line "use libctru::*;" \ |
||||||
|
-- \ |
||||||
|
--target=arm-none-eabi \ |
||||||
|
--sysroot=$DEVKITARM/arm-none-eabi \ |
||||||
|
-isystem$DEVKITARM/arm-none-eabi/include \ |
||||||
|
-isystem/usr/lib/clang/$clang_version/include \ |
||||||
|
-I$DEVKITPRO/libctru/include \ |
||||||
|
-mfloat-abi=hard \ |
||||||
|
-march=armv6k \ |
||||||
|
-mtune=mpcore \ |
||||||
|
-mfpu=vfp \ |
||||||
|
-DARM11 \ |
||||||
|
-D_3DS \ |
||||||
|
> src/bindgen.rs |
@ -0,0 +1,10 @@ |
|||||||
|
#![allow(non_snake_case)] |
||||||
|
// c3d/base.h
|
||||||
|
|
||||||
|
use libc::c_int; |
||||||
|
use super::*; |
||||||
|
|
||||||
|
pub unsafe fn C3D_FixedAttribSet(id: c_int, x: f32, y: f32, z: f32, w: f32) { |
||||||
|
let mut ptr = C3D_FixedAttribGetWritePtr(id); |
||||||
|
*(*ptr).c.as_mut() = [x, y, z, w]; |
||||||
|
} |
File diff suppressed because one or more lines are too long
@ -0,0 +1,33 @@ |
|||||||
|
extern crate libc; |
||||||
|
extern crate core; |
||||||
|
#[macro_use] extern crate ctru_sys as libctru; |
||||||
|
|
||||||
|
#[allow(warnings)] |
||||||
|
mod bindgen; |
||||||
|
pub mod base; |
||||||
|
pub mod texenv; |
||||||
|
pub mod uniforms; |
||||||
|
|
||||||
|
pub use bindgen::*; |
||||||
|
pub use base::*; |
||||||
|
pub use texenv::*; |
||||||
|
pub use uniforms::*; |
||||||
|
|
||||||
|
#[link(name="citro3d")] |
||||||
|
#[link(name="ctru")] |
||||||
|
extern {} |
||||||
|
|
||||||
|
impl Copy for C3D_FVec {} |
||||||
|
impl Clone for C3D_FVec { |
||||||
|
fn clone(&self) -> Self { |
||||||
|
*self |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
impl From<libctru::GPU_DEPTHBUF> for C3D_DEPTHTYPE { |
||||||
|
fn from(fmt: libctru::GPU_DEPTHBUF) -> Self { |
||||||
|
Self { |
||||||
|
__e: fmt, |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,39 @@ |
|||||||
|
#![allow(non_snake_case)] |
||||||
|
// c3d/texenv.h
|
||||||
|
|
||||||
|
use libc::c_int; |
||||||
|
use super::*; |
||||||
|
|
||||||
|
pub unsafe fn C3D_TexEnvSrc(env: *mut C3D_TexEnv, mode: c_int, s1: c_int, s2: c_int, s3: c_int) { |
||||||
|
let param = gpu_tevsources!(s1, s2, s3); |
||||||
|
|
||||||
|
if mode & C3D_RGB as i32 != 0 { |
||||||
|
(*env).srcRgb = param as u16; |
||||||
|
} |
||||||
|
|
||||||
|
if mode & C3D_Alpha as i32 != 0 { |
||||||
|
(*env).srcAlpha = param as u16; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
pub unsafe fn C3D_TexEnvOp(env: *mut C3D_TexEnv, mode: c_int, o1: c_int, o2: c_int, o3: c_int) { |
||||||
|
let param = gpu_tevoperands!(o1, o2, o3); |
||||||
|
|
||||||
|
if mode & C3D_RGB as i32 != 0 { |
||||||
|
(*env).opRgb = param as u16; |
||||||
|
} |
||||||
|
|
||||||
|
if mode & C3D_Alpha as i32 != 0 { |
||||||
|
(*env).opAlpha = param as u16; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
pub unsafe fn C3D_TexEnvFunc(env: *mut C3D_TexEnv, mode: c_int, param: c_int) { |
||||||
|
if mode & C3D_RGB as i32 != 0 { |
||||||
|
(*env).funcRgb = param as u16; |
||||||
|
} |
||||||
|
|
||||||
|
if mode & C3D_Alpha as i32 != 0 { |
||||||
|
(*env).funcAlpha = param as u16; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,35 @@ |
|||||||
|
#![allow(non_snake_case)] |
||||||
|
// c3d/uniforms.h
|
||||||
|
|
||||||
|
use libc::c_int; |
||||||
|
use super::*; |
||||||
|
use libctru::GPU_SHADER_TYPE; |
||||||
|
|
||||||
|
#[inline] |
||||||
|
pub unsafe fn C3D_FVUnifWritePtr(type_: GPU_SHADER_TYPE, id: c_int, size: c_int) -> *mut C3D_FVec { |
||||||
|
for i in 0 .. size { |
||||||
|
C3D_FVUnifDirty[type_ as usize][(id+i) as usize] = true; |
||||||
|
} |
||||||
|
|
||||||
|
return &mut C3D_FVUnif[type_ as usize][id as usize]; |
||||||
|
} |
||||||
|
|
||||||
|
#[inline] |
||||||
|
pub unsafe fn C3D_FVUnifMtxNx4(type_: GPU_SHADER_TYPE, id: c_int, mtx: *const C3D_Mtx, num: c_int) { |
||||||
|
let ptr = C3D_FVUnifWritePtr(type_, id, num); |
||||||
|
|
||||||
|
for i in 0 .. num { |
||||||
|
*ptr.offset(i as isize) = (*mtx).r.as_ref()[i as usize]; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
#[inline] |
||||||
|
pub unsafe fn C3D_FVUnifMtx4x4(type_: GPU_SHADER_TYPE, id: c_int, mtx: *const C3D_Mtx) { |
||||||
|
C3D_FVUnifMtxNx4(type_, id, mtx, 4); |
||||||
|
} |
||||||
|
|
||||||
|
#[inline] |
||||||
|
pub unsafe fn C3D_FVUnifSet(type_: GPU_SHADER_TYPE, id: c_int, x: f32, y: f32, z: f32, w: f32) { |
||||||
|
let ptr = C3D_FVUnifWritePtr(type_, id, 1); |
||||||
|
*(*ptr).c.as_mut() = [x, y, z, w]; |
||||||
|
} |
Loading…
Reference in new issue