From 5826c8c72921bc78b5023424c41fd05226149b1c Mon Sep 17 00:00:00 2001 From: ternaryop8479 Date: Tue, 10 Feb 2026 00:39:35 +0800 Subject: [PATCH] =?UTF-8?q?Revert=20"Fix=EF=BC=9A=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E4=BA=86material=E6=9C=80=E5=A4=A7=E5=8F=AA=E8=83=BD=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD255=E4=B8=AA=E7=9A=84=E9=97=AE=E9=A2=98"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 2e850c40ff7e887cde557ce02489ab06c1f81dc8. 上一个修复可能导致未知的GPU数据传递问题,故回滚至上一次commit. --- examples/cornell_box | Bin 418496 -> 410304 bytes include/basic/constants.h | 13 +- include/core/gbuffer.h | 2 +- shaders/gbuffer.frag | 8 +- shaders/raytracing.comp | 335 ++++++++++++++++++++++++++------------ src/core/gbuffer.cpp | 31 ++-- src/core/raytracer.cpp | 87 ++++------ 7 files changed, 292 insertions(+), 184 deletions(-) diff --git a/examples/cornell_box b/examples/cornell_box index e3bc8f6de03b7328840a9ef5f5b6d9a01cc8eb89..c8bcff203fdc3491710faa3d2209ddeab48586f2 100644 GIT binary patch delta 114641 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 z%0D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 light_range) continue; - } else if (light_type == LIGHT_DIRECTIONAL) { - light_dir = normalize(-light_dir_raw); + if (light_distance > light.range) continue; + } else if (light.type == LIGHT_DIRECTIONAL) { + light_dir = normalize(-light.direction); light_distance = MAX_FLOAT; } else { continue; @@ -262,20 +209,20 @@ vec3 evaluate_direct_lighting(vec3 position, vec3 normal, vec3 view_dir, float NdotV = max(dot(normal, view_dir), 0.0); // PBR lighting - vec3 F0 = mix(vec3(0.04), mat_albedo, mat_metallic); + vec3 F0 = mix(vec3(0.04), material.albedo, material.metallic); vec3 F = fresnel_schlick(max(dot(H, view_dir), 0.0), F0); - float D = distribution_ggx(normal, H, max(mat_roughness, 0.04)); - float G = geometry_smith(normal, view_dir, light_dir, mat_roughness); + float D = distribution_ggx(normal, H, max(material.roughness, 0.04)); + float G = geometry_smith(normal, view_dir, light_dir, material.roughness); vec3 numerator = D * G * F; float denominator = 4.0 * NdotV * NdotL + EPSILON; vec3 specular = numerator / denominator; vec3 kS = F; - vec3 kD = (vec3(1.0) - kS) * (1.0 - mat_metallic); + vec3 kD = (vec3(1.0) - kS) * (1.0 - material.metallic); - vec3 radiance = light_color * light_intensity * attenuation; - direct_light += (kD * mat_albedo * INV_PI + specular) * radiance * NdotL; + vec3 radiance = light.color * light.intensity * attenuation; + direct_light += (kD * material.albedo * INV_PI + specular) * radiance * NdotL; } } @@ -290,26 +237,10 @@ void main() { return; } - // ============ DEBUG MODE 6: 显示材质Metallic ============ - /* - { - uint mat_id = imageLoad(g_material_id, pixel_coords).r; - if (imageLoad(g_position, pixel_coords).w > 0.5 && mat_id < uint(materials.length())) { - Material mat = materials[mat_id]; - float metallic_vis = get_material_metallic(mat); - imageStore(output_image, pixel_coords, vec4(metallic_vis, metallic_vis, metallic_vis, 1.0)); - } else { - imageStore(output_image, pixel_coords, vec4(0.0, 0.0, 0.0, 1.0)); - } - return; - } - */ - // Read G-Buffer vec4 position_data = imageLoad(g_position, pixel_coords); vec4 normal_data = imageLoad(g_normal, pixel_coords); vec4 albedo_data = imageLoad(g_albedo, pixel_coords); - uint material_id = imageLoad(g_material_id, pixel_coords).r; // Background if (position_data.w < 0.5) { @@ -323,6 +254,11 @@ void main() { vec3 normal = normalize(normal_data.xyz); vec3 albedo = albedo_data.rgb; + // 关键修复:从G-Buffer的alpha通道读取material_id + // 注意:albedo_data是从RGBA8纹理读取的,alpha值范围是[0,1] + // 我们需要将其转换回整数ID + uint material_id = uint(albedo_data.a * 255.0 + 0.5); + // Initialize random seed uint seed = uint(pixel_coords.x) + uint(pixel_coords.y) * uint(image_size.x) + u_frame_count * 719393u; @@ -333,17 +269,20 @@ void main() { uint mat_count = uint(materials.length()); if (material_id < mat_count) { + // 从SSBO读取材质 material = materials[material_id]; } else { - // Fallback - 创建默认材质 - material.albedo_metallic = vec4(albedo, 0.0); - material.emission_roughness = vec4(0.0, 0.0, 0.0, 0.5); + // 使用G-Buffer中的albedo作为fallback + material.albedo = albedo; + material.metallic = 0.0; + material.roughness = 0.5; + material.emission = vec3(0.0); material.type = MATERIAL_DIFFUSE; material.ior = 1.5; } // Add emission - color += get_material_emission(material); + color += material.emission; // Direct lighting vec3 view_dir = normalize(u_camera_position - position); @@ -353,7 +292,7 @@ void main() { } // Ambient lighting - color += get_material_albedo(material) * 0.05; + color += material.albedo * 0.05; // Clamp color = clamp(color, vec3(0.0), vec3(10.0)); @@ -368,3 +307,197 @@ void main() { imageStore(accumulation_image, pixel_coords, vec4(color, 1.0)); imageStore(output_image, pixel_coords, vec4(color, 1.0)); } + +// layout(local_size_x = 16, local_size_y = 16) in; +// +// // G-Buffer inputs +// layout(binding = 0, rgba32f) uniform readonly image2D g_position; +// layout(binding = 1, rgba32f) uniform readonly image2D g_normal; +// layout(binding = 2, rgba8) uniform readonly image2D g_albedo; +// +// // Output +// layout(binding = 3, rgba32f) uniform image2D output_image; +// layout(binding = 4, rgba32f) uniform image2D accumulation_image; +// +// // Scene data +// layout(std430, binding = 0) readonly buffer MaterialBuffer { +// Material materials[]; +// }; +// +// layout(std430, binding = 1) readonly buffer LightBuffer { +// Light lights[]; +// }; +// +// // Uniforms +// uniform uint u_frame_count; +// uniform uint u_samples_per_pixel; +// uniform uint u_max_depth; +// uniform uint u_light_count; +// uniform vec3 u_camera_position; +// uniform mat4 u_inv_view_projection; +// uniform bool u_enable_accumulation; +// uniform bool u_use_bvh; +// +// // Cosine-weighted hemisphere sampling +// vec3 cosine_weighted_hemisphere(vec3 normal, inout uint seed) { +// vec2 r = random_vec2(seed); +// float r1 = 2.0 * PI * r.x; +// float r2 = r.y; +// float r2s = sqrt(r2); +// +// vec3 up = abs(normal.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0); +// vec3 tangent = normalize(cross(up, normal)); +// vec3 bitangent = cross(normal, tangent); +// +// vec3 dir = tangent * cos(r1) * r2s + bitangent * sin(r1) * r2s + normal * sqrt(1.0 - r2); +// return normalize(dir); +// } +// +// // Evaluate direct lighting +// vec3 evaluate_direct_lighting(vec3 position, vec3 normal, vec3 view_dir, +// Material material, inout uint seed) { +// vec3 direct_light = vec3(0.0); +// +// for (uint i = 0u; i < u_light_count; i++) { +// Light light = lights[i]; +// vec3 light_dir; +// float light_distance; +// float attenuation = 1.0; +// +// if (light.type == LIGHT_POINT) { +// vec3 to_light = light.position - position; +// light_distance = length(to_light); +// light_dir = to_light / light_distance; +// attenuation = 1.0 / max(light_distance * light_distance, 0.01); +// +// if (light_distance > light.range) continue; +// } else if (light.type == LIGHT_DIRECTIONAL) { +// light_dir = normalize(-light.direction); +// light_distance = MAX_FLOAT; +// } else { +// continue; +// } +// +// float NdotL = max(dot(normal, light_dir), 0.0); +// +// if (NdotL > 0.0) { +// vec3 H = normalize(view_dir + light_dir); +// float NdotV = max(dot(normal, view_dir), 0.0); +// +// // PBR lighting +// vec3 F0 = mix(vec3(0.04), material.albedo, material.metallic); +// vec3 F = fresnel_schlick(max(dot(H, view_dir), 0.0), F0); +// float D = distribution_ggx(normal, H, max(material.roughness, 0.04)); +// float G = geometry_smith(normal, view_dir, light_dir, material.roughness); +// +// vec3 numerator = D * G * F; +// float denominator = 4.0 * NdotV * NdotL + EPSILON; +// vec3 specular = numerator / denominator; +// +// vec3 kS = F; +// vec3 kD = (vec3(1.0) - kS) * (1.0 - material.metallic); +// +// vec3 radiance = light.color * light.intensity * attenuation; +// direct_light += (kD * material.albedo * INV_PI + specular) * radiance * NdotL; +// } +// } +// +// return direct_light; +// } +// +// // Trace indirect lighting (simple path tracing) +// vec3 trace_indirect(vec3 position, vec3 normal, Material material, inout uint seed) { +// vec3 color = vec3(0.0); +// +// // Sample random direction +// vec3 ray_dir = cosine_weighted_hemisphere(normal, seed); +// +// // Sky color based on direction +// float t = 0.5 * (ray_dir.y + 1.0); +// vec3 sky_color = mix(vec3(1.0), vec3(0.5, 0.7, 1.0), t) * 0.2; +// +// color = sky_color; +// +// return color; +// } +// +// void main() { +// ivec2 pixel_coords = ivec2(gl_GlobalInvocationID.xy); +// ivec2 image_size = imageSize(output_image); +// +// if (pixel_coords.x >= image_size.x || pixel_coords.y >= image_size.y) { +// return; +// } +// +// // Read G-Buffer +// vec4 position_data = imageLoad(g_position, pixel_coords); +// vec4 normal_data = imageLoad(g_normal, pixel_coords); +// vec4 albedo_data = imageLoad(g_albedo, pixel_coords); +// +// // Check if this pixel has valid geometry +// if (position_data.w < 0.5) { +// vec3 background = vec3(0.1, 0.1, 0.15); +// imageStore(output_image, pixel_coords, vec4(background, 1.0)); +// imageStore(accumulation_image, pixel_coords, vec4(background, 1.0)); +// return; +// } +// +// vec3 position = position_data.xyz; +// vec3 normal = normalize(normal_data.xyz); +// vec3 albedo = albedo_data.rgb; +// uint material_id = floatBitsToUint(albedo_data.a); +// +// if (material_id >= 1000u) { +// material_id = 0u; +// } +// +// // Initialize random seed +// uint seed = uint(pixel_coords.x) + uint(pixel_coords.y) * uint(image_size.x) + u_frame_count * 719393u; +// +// vec3 color = vec3(0.0); +// +// // Get material +// Material material; +// if (material_id < uint(materials.length())) { +// material = materials[material_id]; +// } else { +// material.albedo = albedo; +// material.metallic = 0.0; +// material.roughness = 0.5; +// material.emission = vec3(0.0); +// material.type = MATERIAL_DIFFUSE; +// material.ior = 1.5; +// } +// +// // Add emission +// color += material.emission; +// +// // Direct lighting +// vec3 view_dir = normalize(u_camera_position - position); +// +// if (u_light_count > 0u) { +// color += evaluate_direct_lighting(position, normal, view_dir, material, seed); +// } +// +// // Indirect lighting (path tracing) - THIS ADDS NOISE +// for (uint samp_idx = 0u; samp_idx < u_samples_per_pixel; samp_idx++) { // 修复: sample -> samp_idx +// vec3 indirect = trace_indirect(position, normal, material, seed); +// color += indirect * material.albedo * INV_PI; +// } +// +// // Ambient +// color += material.albedo * 0.02; +// +// // Clamp +// color = clamp(color, vec3(0.0), vec3(100.0)); +// +// // Accumulation for denoising +// if (u_enable_accumulation && u_frame_count > 0u) { +// vec3 accumulated = imageLoad(accumulation_image, pixel_coords).rgb; +// float weight = 1.0 / float(u_frame_count + 1u); +// color = mix(accumulated, color, weight); +// } +// +// imageStore(accumulation_image, pixel_coords, vec4(color, 1.0)); +// imageStore(output_image, pixel_coords, vec4(color, 1.0)); +// } diff --git a/src/core/gbuffer.cpp b/src/core/gbuffer.cpp index 96ecc51..b3e01d0 100644 --- a/src/core/gbuffer.cpp +++ b/src/core/gbuffer.cpp @@ -1,5 +1,4 @@ #include "core/gbuffer.h" -#include "basic/constants.h" #include "utils/logger.h" #include @@ -11,7 +10,7 @@ GBuffer::GBuffer(uint width, uint height) , fbo_(INVALID_HANDLE) , depth_texture_(INVALID_HANDLE) , initialized_(false) { - for (int i = 0; i < GBUFFER_TEXTURE_COUNT; ++i) { + for (int i = 0; i < GBUFFER_COUNT; ++i) { textures_[i] = INVALID_HANDLE; } } @@ -34,30 +33,32 @@ bool GBuffer::initialize() { textures_[GBUFFER_POSITION] = create_texture_(GL_RGBA32F, GL_RGBA, GL_FLOAT); textures_[GBUFFER_NORMAL] = create_texture_(GL_RGBA32F, GL_RGBA, GL_FLOAT); textures_[GBUFFER_ALBEDO] = create_texture_(GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE); - textures_[GBUFFER_MATERIAL_ID] = create_texture_(GL_R32UI, GL_RED_INTEGER, GL_UNSIGNED_INT); // Attach textures to framebuffer - glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + GBUFFER_POSITION, GL_TEXTURE_2D, textures_[GBUFFER_POSITION], 0); - glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + GBUFFER_NORMAL, GL_TEXTURE_2D, textures_[GBUFFER_NORMAL], 0); - glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + GBUFFER_ALBEDO, GL_TEXTURE_2D, textures_[GBUFFER_ALBEDO], 0); - glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + GBUFFER_MATERIAL_ID, GL_TEXTURE_2D, textures_[GBUFFER_MATERIAL_ID], 0); + glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + GBUFFER_POSITION, + GL_TEXTURE_2D, textures_[GBUFFER_POSITION], 0); + glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + GBUFFER_NORMAL, + GL_TEXTURE_2D, textures_[GBUFFER_NORMAL], 0); + glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + GBUFFER_ALBEDO, + GL_TEXTURE_2D, textures_[GBUFFER_ALBEDO], 0); // Create depth texture glGenTextures(1, &depth_texture_); glBindTexture(GL_TEXTURE_2D, depth_texture_); - glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH24_STENCIL8, width_, height_, 0, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, nullptr); + glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH24_STENCIL8, width_, height_, 0, + GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, nullptr); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D, depth_texture_, 0); + glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, + GL_TEXTURE_2D, depth_texture_, 0); // Set draw buffers - GLenum draw_buffers[GBUFFER_TEXTURE_COUNT] = { + GLenum draw_buffers[GBUFFER_COUNT] = { GL_COLOR_ATTACHMENT0 + GBUFFER_POSITION, GL_COLOR_ATTACHMENT0 + GBUFFER_NORMAL, - GL_COLOR_ATTACHMENT0 + GBUFFER_ALBEDO, - GL_COLOR_ATTACHMENT0 + GBUFFER_MATERIAL_ID + GL_COLOR_ATTACHMENT0 + GBUFFER_ALBEDO }; - glDrawBuffers(GBUFFER_TEXTURE_COUNT, draw_buffers); + glDrawBuffers(GBUFFER_COUNT, draw_buffers); // Check framebuffer completeness if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) { @@ -81,7 +82,7 @@ void GBuffer::release() { fbo_ = INVALID_HANDLE; } - for (int i = 0; i < GBUFFER_TEXTURE_COUNT; ++i) { + for (int i = 0; i < GBUFFER_COUNT; ++i) { if (textures_[i] != INVALID_HANDLE) { glDeleteTextures(1, &textures_[i]); textures_[i] = INVALID_HANDLE; @@ -193,7 +194,7 @@ void GBuffer::resize(uint width, uint height) { } TextureHandle GBuffer::get_texture(int index) const { - if (index < 0 || index >= GBUFFER_TEXTURE_COUNT) { + if (index < 0 || index >= GBUFFER_COUNT) { Logger::error("Invalid G-Buffer texture index"); return INVALID_HANDLE; } diff --git a/src/core/raytracer.cpp b/src/core/raytracer.cpp index 4f4215b..a425b58 100644 --- a/src/core/raytracer.cpp +++ b/src/core/raytracer.cpp @@ -143,8 +143,8 @@ void RayTracer::trace(const Scene& scene, const GBuffer& gbuffer, TextureHandle bind_gbuffer_(gbuffer); // Bind output and accumulation textures - glBindImageTexture(GBUFFER_TEXTURE_COUNT, output_texture, 0, GL_FALSE, 0, GL_WRITE_ONLY, GL_RGBA32F); - glBindImageTexture(GBUFFER_TEXTURE_COUNT + 1, accumulation_texture_, 0, GL_FALSE, 0, GL_READ_WRITE, GL_RGBA32F); + glBindImageTexture(3, output_texture, 0, GL_FALSE, 0, GL_WRITE_ONLY, GL_RGBA32F); + glBindImageTexture(4, accumulation_texture_, 0, GL_FALSE, 0, GL_READ_WRITE, GL_RGBA32F); // Bind BVH buffers if enabled if (config_.use_bvh_ && bvh_built_) { @@ -234,14 +234,14 @@ void RayTracer::upload_scene_data_(const Scene& scene) { // Upload materials const auto& materials = scene.get_materials(); if (!materials.empty()) { - // 使用 vec4 确保对齐正确 - struct alignas(16) MaterialData { - Vec4 albedo_metallic; // xyz = albedo, w = metallic - Vec4 emission_roughness; // xyz = emission, w = roughness + struct MaterialData { + Vec3 albedo; + float metallic; + Vec3 emission; + float roughness; int type; float ior; - float padding1; - float padding2; + Vec2 padding; }; std::vector material_data; @@ -249,52 +249,34 @@ void RayTracer::upload_scene_data_(const Scene& scene) { for (const auto& mat : materials) { MaterialData data; - data.albedo_metallic = Vec4(mat->get_albedo(), mat->get_metallic()); - data.emission_roughness = Vec4(mat->get_emission(), mat->get_roughness()); + data.albedo = mat->get_albedo(); + data.metallic = mat->get_metallic(); + data.emission = mat->get_emission(); + data.roughness = mat->get_roughness(); data.type = static_cast(mat->get_type()); data.ior = mat->get_ior(); - data.padding1 = 0.0f; - data.padding2 = 0.0f; material_data.push_back(data); } - // 打印调试信息 - Logger::info("MaterialData size: " + std::to_string(sizeof(MaterialData)) + " bytes"); - Logger::info("Material[0] albedo: (" + - std::to_string(material_data[0].albedo_metallic.x) + ", " + - std::to_string(material_data[0].albedo_metallic.y) + ", " + - std::to_string(material_data[0].albedo_metallic.z) + ")"); - Logger::info("Material[0] metallic: " + std::to_string(material_data[0].albedo_metallic.w)); - - // 找到金属材质并打印 - for (size_t i = 0; i < material_data.size(); i++) { - if (material_data[i].albedo_metallic.w > 0.5f) { - Logger::info("Material[" + std::to_string(i) + "] is metallic: " + - std::to_string(material_data[i].albedo_metallic.w)); - } - } - glBindBuffer(GL_SHADER_STORAGE_BUFFER, material_buffer_); glBufferData(GL_SHADER_STORAGE_BUFFER, material_data.size() * sizeof(MaterialData), material_data.data(), GL_DYNAMIC_DRAW); glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 0, material_buffer_); - glBindBuffer(GL_SHADER_STORAGE_BUFFER, 0); - - Logger::info("Uploaded " + std::to_string(material_data.size()) + " materials to GPU"); - } else { - Logger::warning("No materials to upload"); } - // Upload lights (保持不变) + // Upload lights const auto& lights = scene.get_lights(); if (!lights.empty()) { - // 同样使用 vec4 确保对齐 - struct alignas(16) LightData { - Vec4 position_type; // xyz = position, w = type (as float) - Vec4 direction_intensity; // xyz = direction, w = intensity - Vec4 color_range; // xyz = color, w = range - Vec4 spot_angles; // xy = spot angles, zw = padding + struct LightData { + Vec3 position; + int type; + Vec3 direction; + float intensity; + Vec3 color; + float range; + Vec2 spot_angles; + Vec2 padding; }; std::vector light_data; @@ -302,33 +284,28 @@ void RayTracer::upload_scene_data_(const Scene& scene) { for (const auto& light : lights) { LightData data; - data.position_type = Vec4(light->get_position(), static_cast(light->get_type())); - data.direction_intensity = Vec4(light->get_direction(), light->get_intensity()); - data.color_range = Vec4(light->get_color(), light->get_range()); - data.spot_angles = Vec4(light->get_inner_angle(), light->get_outer_angle(), 0.0f, 0.0f); + data.position = light->get_position(); + data.type = static_cast(light->get_type()); + data.direction = light->get_direction(); + data.intensity = light->get_intensity(); + data.color = light->get_color(); + data.range = light->get_range(); + data.spot_angles = Vec2(light->get_inner_angle(), light->get_outer_angle()); light_data.push_back(data); } - Logger::info("LightData size: " + std::to_string(sizeof(LightData)) + " bytes"); - glBindBuffer(GL_SHADER_STORAGE_BUFFER, light_buffer_); glBufferData(GL_SHADER_STORAGE_BUFFER, light_data.size() * sizeof(LightData), light_data.data(), GL_DYNAMIC_DRAW); glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 1, light_buffer_); - glBindBuffer(GL_SHADER_STORAGE_BUFFER, 0); - - Logger::info("Uploaded " + std::to_string(light_data.size()) + " lights to GPU"); - } else { - Logger::warning("No lights to upload"); } } void RayTracer::bind_gbuffer_(const GBuffer& gbuffer) { - glBindImageTexture(GBUFFER_POSITION, gbuffer.get_texture(GBUFFER_POSITION), 0, GL_FALSE, 0, GL_READ_ONLY, GL_RGBA32F); - glBindImageTexture(GBUFFER_NORMAL, gbuffer.get_texture(GBUFFER_NORMAL), 0, GL_FALSE, 0, GL_READ_ONLY, GL_RGBA32F); - glBindImageTexture(GBUFFER_ALBEDO, gbuffer.get_texture(GBUFFER_ALBEDO), 0, GL_FALSE, 0, GL_READ_ONLY, GL_RGBA8); - glBindImageTexture(GBUFFER_MATERIAL_ID, gbuffer.get_texture(GBUFFER_MATERIAL_ID), 0, GL_FALSE, 0, GL_READ_ONLY, GL_R32UI); + glBindImageTexture(0, gbuffer.get_texture(GBUFFER_POSITION), 0, GL_FALSE, 0, GL_READ_ONLY, GL_RGBA32F); + glBindImageTexture(1, gbuffer.get_texture(GBUFFER_NORMAL), 0, GL_FALSE, 0, GL_READ_ONLY, GL_RGBA32F); + glBindImageTexture(2, gbuffer.get_texture(GBUFFER_ALBEDO), 0, GL_FALSE, 0, GL_READ_ONLY, GL_RGBA8); } void RayTracer::set_compute_shader(const Shader& shader) {