Skip to content

Instantly share code, notes, and snippets.

View wwylele's full-sized avatar
🐟
Eating fish

Weiyi Wang wwylele

🐟
Eating fish
View GitHub Profile
@wwylele
wwylele / main.c
Created March 12, 2018 11:14
shadow map test
#include <3ds.h>
#include <citro3d.h>
#include <string.h>
#include "vshader_shbin.h"
#include <stdio.h>
#define CLEAR_COLOR 0xFFB0D8D5
#define DISPLAY_TRANSFER_FLAGS \
(GX_TRANSFER_FLIP_VERT(0) | GX_TRANSFER_OUT_TILED(0) | GX_TRANSFER_RAW_COPY(0) | \
@wwylele
wwylele / doc.md
Created July 26, 2018 16:13
WIP 3DS CEC doc

3DS CEC (StreetPass) Documentation

Overall Model

The CEC system module consists of two main components: mailbox manager and StreetPass communicator. Both work on the system save 00010026, which stores all mailbox information and message data. A simplified diagram of CEC communication model is

Application <=> Mailbox Manager <=> System Save (Mailbox) <=> StreetPass communicator <=> NWM/network <=> StreetPass communicator of another 3DS <=> ...

Many CEC service (cecd:u and cecd:s) functions are interfaces exposed from the mailbox manager, which read and write the system save. The mailbox manager is essentially a thick layer over direct file IO, which performances data initialization and verification on top of raw system data read/write.

@wwylele
wwylele / lut_cp.md
Last active September 19, 2022 17:27

GPU_LUTINPUT_CP

GPU_LUTINPUT_CP (= "cos(phi)") is used for anisotropic reflection, based on Schlick's model. According to the paper, the input value should be T * H', where T is the tangent vector, and H' is the projection of half-angle vector on to the tangent plane.

Here are some (strange) details:

  • GPU_LUTINPUT_CP is only available under configuration 7
  • H' is not normalized. This is found when replicating the output from 3ds in citra. Unormalized H' produces the same result, while normalized H' doesn't. This means the angle phi is not the angle between T and H' anymore. On Schlick's paper, it is unclear whether this is the case.
  • Also found when implementing in citra: when using normal mapping, it seems that the tangent vector stays (1, 0, 0) in surface-local space, instead of rotating with the normal vector. This means the normal and tangent vectors are not perpendicular anymore
  • Dispite the point above,
@wwylele
wwylele / 3ds-0004009B00010402.txt
Created September 22, 2017 13:31
3DS "area:" archive research
"$(country_id)_LZ.bin"
[LZ]{
struct {
u32 entry_count?;
struct { // size=0x818
struct {
u8 zero?
u8 zero?
u8 region_id;
@wwylele
wwylele / dijkstra.rs
Last active July 24, 2020 04:02
dijkstra template in rust
use std::ops::{Index, IndexMut, Add};
use std::cmp::Ord;
#[derive(Clone, Copy)]
pub enum NodeStatus {
Unknown,
Visiting(usize),
Visited,
}
@wwylele
wwylele / main.rs
Created June 14, 2020 04:46
Rust template template parameter
use std::collections::*;
use std::hash::Hash;
use std::iter::FromIterator;
trait SetFunc<T> {
type Set: IntoIterator + FromIterator<T>;
}
struct BTreeSetF;
@wwylele
wwylele / main.c
Created July 5, 2018 07:43
proctex mipmap test
#include <3ds.h>
#include <citro3d.h>
#include <tex3ds.h>
#include <string.h>
#include <stdlib.h>
#include "vshader_shbin.h"
#define CLEAR_COLOR 0x68B0D8FF
#define DISPLAY_TRANSFER_FLAGS \
@wwylele
wwylele / main.c
Created July 2, 2018 18:13
mipmap test
#include <3ds.h>
#include <citro3d.h>
#include <tex3ds.h>
#include <string.h>
#include <stdlib.h>
#include "vshader_shbin.h"
#define CLEAR_COLOR 0x68B0D8FF
#define DISPLAY_TRANSFER_FLAGS \
@wwylele
wwylele / main.c
Created May 5, 2018 01:29
primitive restart test
#include <3ds.h>
#include <citro3d.h>
#include <string.h>
#include "vshader_shbin.h"
#define CLEAR_COLOR 0x68B0D8FF
#define DISPLAY_TRANSFER_FLAGS \
(GX_TRANSFER_FLIP_VERT(0) | GX_TRANSFER_OUT_TILED(0) | GX_TRANSFER_RAW_COPY(0) | \
GX_TRANSFER_IN_FORMAT(GX_TRANSFER_FMT_RGBA8) | GX_TRANSFER_OUT_FORMAT(GX_TRANSFER_FMT_RGB8) | \
@wwylele
wwylele / sample shader
Created April 24, 2018 08:44
sample shader
////////////////////////////////////////////////////////////////
/// Programmable Vertex Shader
#version 330 core
#extension GL_ARB_separate_shader_objects : enable // only presents for separable shader
struct pica_uniforms {
bool b[16];
uvec4 i[4];
vec4 f[96];