Gå til innhold

SDL + openGL editere wannebe shader


Anbefalte innlegg

Sorry at jeg ikke kunne finne en bedre tittel.

 

Ok. her er dealen. jeg har en bunsj 3D programmer som bruker SDL og openGL, og

noen programmer som bruker SDL og gjør bildemanipulasjon.

Da hadde det vært kult å kombinere disse to slik at jeg kan eksempelvis legge en blur eller fargefordreining oppå 3D bildet.

Dessverre klarer jeg ikke å lese skjerbildet med SDL_Surface etter vinduet er opprettet og openGL har kontrollen. Hadde jeg vært proff, ville jeg gjordt det samme med shadere, men enn så lenge vil jeg bare ha det gamle til å funke.

help anyone?

 

er er et eksempel på hva et filter. Vanligvis loader jeg bildet mitt rett på en SDL_Surface, Setter den til vindusinnholdet (SDL_SetVideoMode), og begynner og jalle.

 

//header.h

 typedef struct {
 	unsigned char b, g, r, a;
 } pixel;

 

#include "header.h"
//sett oppe en bildeflate. vis den på skjerm.

void blur(SDL_Surface *surface, unsigned int filter[], int inx, int iny)

{
int edgex = (int)inx/2;           //Jeg feiger ut og unngå kantprolemet
int edgey = (int)iny/2;           //Ved å ikke behandle kantene.
pixel * pixels = (pixel*) surface->pixels;	
int x, y, fx, fy;
           int bredde = (surface->w);// bilde bredden
for(x = edgex; x < bredde - edgex; x++){
 for(y = edgey; y < brede - edgey; y++){
                                   //Her lagrer jeg pixeldata
 	unsigned int tmpr = 0;       //rød
 	unsigned int tmpg = 0;      //grønn
 	unsigned int tmpb = 0;      //blå
 	for(fy = 0; fy < iny; fy++){
   for(fx = 0; fx < inx; fx++){  	tmpr += filter[fx + fy*inx]*pixels[x+fx-edgex + (y+fy-edgey)*bredde].r;
tmpg += filter[fx + fy*inx]*pixels[x+fx-edgex + (y+fy-edgey)*bredde].g;
tmpb += filter[fx + fy*inx]*pixels[x+fx-edgex + (y+fy-edgey)*bredde].b;
   }
 	}
                                   //setter pixeldataen til "gjennomsnittet av de hosliggende pixler.
 	pixels[x + y*bredde].r = tmpr/(inx*iny);
 	pixels[x + y*bredde].g = tmpg/(inx*iny);
 	pixels[x + y*bredde].b = tmpb/(inx*iny);
 }
}

}

Lenke til kommentar
Videoannonse
Annonse
  • 3 uker senere...

beste måten å gjøre dette på er nok...

gitt at du har en klasse som klarer å rendre til texture..

 

startRtt(texId);

 

drawScene();

 

stopRtt();

 

glBindTexture(texId);

enableShader(minHackShader);

 

drawFullScreen2dQuad();

 

disableShaders();

 

tegning til tekstur vil fylle opp en gl-tekstur med data fra framebuffer.

Det finnes mye god informasjon om dette på nett. bare søk på Frame Buffer Object

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...