{"record":{"id":"6487df2190599bcb","repo":"FyroxEngine/Fyrox","slug":"only-rectangle-textures-can-be-used-as-render-targ-6487df","errorCode":null,"errorMessage":"only rectangle textures can be used as render target!","messagePattern":"only rectangle textures can be used as render target!","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"fyrox-impl/src/renderer/mod.rs","lineNumber":1311,"sourceCode":"\n        let backbuffer_width = self.frame_size.0 as f32;\n        let backbuffer_height = self.frame_size.1 as f32;\n\n        let window_viewport = Rect::new(0, 0, self.frame_size.0 as i32, self.frame_size.1 as i32);\n\n        let frame_size = scene\n            .rendering_options\n            .render_target\n            .as_ref()\n            .map_or_else(\n                // Use either backbuffer size\n                || Vector2::new(backbuffer_width, backbuffer_height),\n                // Or framebuffer size\n                |rt| {\n                    if let TextureKind::Rectangle { width, height } = rt.data_ref().kind() {\n                        Vector2::new(width as f32, height as f32)\n                    } else {\n                        panic!(\"only rectangle textures can be used as render target!\")\n                    }\n                },\n            )\n            // Clamp to [1.0; infinity] range.\n            .sup(&Vector2::new(1.0, 1.0));\n\n        let scene_render_data = match self.scene_data_map.entry(scene_handle) {\n            Entry::Occupied(entry) => {\n                let render_data = entry.into_mut();\n                recreate_render_data_if_needed(\n                    scene_handle,\n                    &*self.server,\n                    &mut render_data.scene_data,\n                    frame_size,\n                    FrameTextureKind::Rectangle,\n                )?;\n                render_data\n            }","sourceCodeStart":1293,"sourceCodeEnd":1329,"githubUrl":"https://github.com/FyroxEngine/Fyrox/blob/76c91aad8eca488ce527b1af707be8b3b24ad72d/fyrox-impl/src/renderer/mod.rs#L1293-L1329","documentation":"The renderer computes the framebuffer size from the render-target texture; only TextureKind::Rectangle carries usable width/height for this purpose. Any other texture kind panics because it cannot serve as a render target.","triggerScenarios":"Setting a camera/scene render target to a texture with kind D2, Cube, or Volume and running a render pass.","commonSituations":"Creating offscreen render targets with the wrong TextureKind; reusing regular 2D sampled textures as render targets; following outdated tutorials.","solutions":["Create render-target textures with TextureKind::Rectangle { width, height }","Validate the texture kind before assigning it as a render target","Use RenderTarget::screen() or None when the window backbuffer is intended"],"exampleFix":"// before\nlet rt = Texture::new(ctx, TextureDescriptor { kind: TextureKind::D2 { width: 512, height: 512 }, ..});\n// after\nlet rt = Texture::new(ctx, TextureDescriptor { kind: TextureKind::Rectangle { width: 512, height: 512 }, ..});","handlingStrategy":"validation","validationCode":"assert!(matches!(rt.data_ref().kind(), TextureKind::Rectangle{..}));","typeGuard":"fn as_rect_kind(k: &TextureKind) -> Option<(u32,u32)> { if let TextureKind::Rectangle{width,height} = k { Some((*width,*height)) } else { None } }","tryCatchPattern":null,"preventionTips":["Use TextureKind::Rectangle for all render targets","Centralize render-target creation in one validated helper","Never assign sampled 2D textures as render targets"],"tags":["render-target","texture","renderer","panic"],"backgroundTag":"incompatible-source-type","analyzedSha":"76c91aad8eca488ce527b1af707be8b3b24ad72d","analyzedAt":"2026-09-10T16:04:01.633Z","contentChangedAt":"2026-09-10T16:04:01.633Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}