commit x64 compilation from lulu cause the other branch dont seems to compile properly at home
This commit is contained in:
79
include/modules/raytracer/raytracer_job.cpp
Normal file
79
include/modules/raytracer/raytracer_job.cpp
Normal file
@ -0,0 +1,79 @@
|
||||
/* -----------------------------------------------------------------------------
|
||||
GSFramework
|
||||
Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
|
||||
----------------------------------------------------------------------------- */
|
||||
|
||||
|
||||
#include "raytracer/raytracer_job.h"
|
||||
#include "core/geometry.h"
|
||||
#include "rand/rand.h"
|
||||
|
||||
using namespace GS::Raytrace;
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
void RaytraceJob::Execute(uint)
|
||||
{
|
||||
Vector4 pt_s = pt_l + dt_l * (float)start_height;
|
||||
|
||||
for (int v = start_height; v < end_height; ++v)
|
||||
{
|
||||
Vector4 dt_s = ((pt_r + dt_r * (float)start_height) - (pt_l + dt_l * (float)start_height)) / (float)pitch;
|
||||
for (int u = start_width; u < end_width; ++u)
|
||||
{
|
||||
Vector4 d = (pt_s + dt_s * (float)u - s).Normalized();
|
||||
core->PrimaryRay(RayGrid(s, d), hdr[v * pitch + u]);
|
||||
}
|
||||
pt_s += dt_l;
|
||||
}
|
||||
}
|
||||
void AntialiasJob::Execute(uint)
|
||||
{
|
||||
Configuration &config = core->GetConfiguration();
|
||||
|
||||
float aa_v_k = config.interlaced_trace_half_frame ? 0.5f : 1.f,
|
||||
aa_threshold = config.aa_threshold,
|
||||
aa_jitter = config.aa_jitter;
|
||||
|
||||
int aa_sample = config.aa_sample;
|
||||
|
||||
// When rendering half frame halve the AA kernel vertically.
|
||||
for (int v = start_height; v < end_height; ++v)
|
||||
for (int u = start_width; u < end_width; ++u)
|
||||
{
|
||||
Color *o_hdr = &hdr[v * pitch + u];
|
||||
|
||||
// Check threshold.
|
||||
if (
|
||||
(Vector4::Dist2(o_hdr[0], o_hdr[-1]) < aa_threshold) &&
|
||||
(Vector4::Dist2(o_hdr[0], o_hdr[-pitch]) < aa_threshold) &&
|
||||
(Vector4::Dist2(o_hdr[0], o_hdr[1]) < aa_threshold) &&
|
||||
(Vector4::Dist2(o_hdr[0], o_hdr[pitch]) < aa_threshold)
|
||||
)
|
||||
continue;
|
||||
|
||||
// Multi-sample.
|
||||
o_hdr[0].Set(0, 0, 0);
|
||||
|
||||
for (int ms_v = 0; ms_v < aa_sample; ++ms_v)
|
||||
{
|
||||
// TODO pre-calculate jittered/non-jittered grids.
|
||||
float ms_v_o = v + ((float)ms_v * aa_v_k) / aa_sample + (aa_jitter ? Random::FRand(0.125f / aa_sample) : 0);
|
||||
|
||||
Vector4 dt_s = ((pt_r + dt_r * ms_v_o) - (pt_l + dt_l * ms_v_o)) / (float)pitch,
|
||||
pt_s = pt_l + dt_l * ms_v_o;
|
||||
|
||||
for (int ms_u = 0; ms_u < aa_sample; ++ms_u)
|
||||
{
|
||||
float ms_u_o = u + (float)ms_u / aa_sample + (aa_jitter ? Random::FRand(0.125f / aa_sample) : 0);
|
||||
Vector4 d = (pt_s + dt_s * ms_u_o - s).Normalized();
|
||||
|
||||
Color out;
|
||||
core->PrimaryRay(RayGrid(s, d), out);
|
||||
o_hdr[0] += out.Clamped(0, 1);
|
||||
}
|
||||
}
|
||||
o_hdr[0] /= (float)(aa_sample * aa_sample);
|
||||
}
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
Reference in New Issue
Block a user