Folgende Situation: Ich habe eine View-stage-Kette mit 2 oder mehr stages, in etwa wie folgt:
Code:
bmp_camera = bmap_createblack(screen_size.x,screen_size.y,32);
camera.bmap = bmp_camera;
camera.stage = view_bloom;
view_bloom.stage = view_combine;


Dabei hat letzterer View folgenden Effekt:
Code:
sampler CameraSampler = sampler_state { texture = <bmp_camera_bmap>; };
sampler BloomSampler = sampler_state { texture = <TargetMap>; };

float4 pp_combine( float2 Tex : TEXCOORD0 ) : COLOR0 
{
   float4 Color = 0.5*tex2D( BloomSampler, Tex) + tex2D( CameraSampler, Tex);

	 return Color;
}


Ändere ich die Auflösung (per default.c und F5) in eine höhere, so gibt es kein Problem. Ist die neue Auflösung jedoch kleiner als die vorherige (bzw. kleiner als die größte, die bisher bei Laufzeit gewählt worden ist), so wird "CameraSampler" inkorrekt gelesen. "bmp_camera" wird stets an die aktuelle Bildschirmauflösung angepasst, daher sollte diese Bitmap zudem die gleiche Auflösung wie "TargetMap" besitzen. Es sieht aber aus, als wäre "Tex.xy" bei dieser Bitmap fälschlicherweise zu klein, weshalb nur ein Ausschnitt aus jener gerendert wird.

Code:
DEBUG_VAR(screen_size.x,20);
DEBUG_VAR(bmp_camera->width,40);
if(render_target) DEBUG_VAR(render_target->width,60);


Zudem lässt sich beobachten, dass "render_target->width" beim Übergang in eine höhere Auflösung größer wird, jedoch niemals kleiner.


Hier ein lauffähiges Minimalbeispiel: http://www.superku.de/bloom_problem.zip

Ich danke im Voraus!


EDIT: Verwendete Version: 8.20.1

Last edited by Superku; 06/19/11 12:39.

"Falls das Resultat nicht einfach nur dermassen gut aussieht, sollten Sie nochmal von vorn anfangen..." - Manual

Check out my new game: Pogostuck: Rage With Your Friends