Tuturial para usar Triple Buffering com Directx
Esse tutorial vai deixar você usar o triple buffering com o directx, coisa que normalmente só é possível em opengl.
explicação sobre tirada da wikipedia(traduzida rapidamente):
geralmente monitores são atualizados continuadamente e em antigos monitores crt, um pequeno atraso acontece entre atualizar a menor linha horizontal do monitor até a linha mais alta. Este atraso que continua a existir em equipamentos mais modernos, dá uma oportunidade para que a placa de video altere o conteudo de um framebuffer sem erros visiveis, como gráficos parcialmente desenhados , ou que uma parte superior do monitor mostre um frame a frente e a parte de baixo mostre outro frame (conhecido como tearing).
Agora triple buffering :
outro metodo de triple buffering involve sincronizar o frame rate do monitor, e simplesmente usar o terceiro buffer como um metodo de dar espaço para a demanda variavel no tanto de gráficos desenhados. Isto é, usar o buffer no sentido real onde um buffer age como um reservatorio.
Tal metodo dá um Fps menos variavel do que o normal.
Triple buffering inplica em três buffers, mas o metodo pode ser extendido para quaisquer numero de buffers forem necessarios para a aplicação. Geralmente, não há vantagem alguma em usar mais do que três buffers.
Vantagens do triple buffering:
Se o sistema tem três buffers A, B e c, ele não precisa esperar para trocar de buffers. Ele pode mostrar o buffer B enquanto está montando a imagem no buffer A. Quando ele acabar de renderizar a imagem em A, ele pode começar a renderizar em C imediatamente. Quando o monitor tiver um branco vertical, ele pode mostar o buffer A e fazer o buffer B disponivel para reuso.
Agora a explicação mais simples, do meu jeito:
Vsync impede que você tenha fps mais alto do que o seu monitor pode mostrar, assim você não ve certas falhas como tearing (explicado acima).
Triple buffering, permite que sua placa tenha digamos "frames reservas" e assim o seu fps não irá cair bruscamente.
Porém vsync+triple buffering só funciona em opengl, devido a uma limitação na api do directx.
AGORA UM PORÉM:
Triple buffering parece a solução perfeita para diminuir fps baixo, porém não é de graça. Ativando triple buffering também significa que você precisará de 50% a mais de espaço para buffers. Dentro de certas condições, ele também pode NEGATIVAMENTE impactar a sua experiencia no jogo. Um exemplo simples pode ilustrar este problema em potencial. Vamos dizer que você está rodando um jogo à 1600x1200(resolução alta). Cada pixel precisa de 32bits para guardar informação, 1600x1200x32=61.440.000bits, convertendo para megabytes, dá igual à 7.32mb, para usar double buffering, você precisará de 14.64mb de memória de video, para usar triple buffering, ele requer 21.96mb de memória de video. Ok, é só 21.96mb, não é muito, placas modernas tem geralmente 256mb. PARECE que memoria não seria um problema... porém se nos habilitarmos 4xFSAA, o numero aumenta muito rapido. Com 4xAA há quatro vezes mais pixels sendo desenhados, então você precisa multiplicar 21.96mbx4 o que resulta em 87.84mb. É mais que um terço da ram da sua vga. Se um jogo precisa de 200mb para texturas, light maps, bump maps, normal maps, etc então você vai ter um gameplay muito ruim, com várias pausas devido ao acesso constante com o hd. Isso é apenas algo para você lembrar, que se você ver que o jogo está tendo vários acessos ao hd, pode ser um indicio de que triple buffering está ocupando memoria demais, e é melho desabilita-lo
chega de texto vamo pra parte pratica:
PUXE O .NET (http://www.microsoft.com/downloads/...E3-F589-4842-8157-034D1E7CF3A3&displaylang=en)
puxe o dxtweaker: http://www.nonatainment.de/web/DirectXTweaker/Download/tabid/58/Default.aspx
não se esqueça de pegar a atualização do .net
Extraia o dxtweaker para uma pasta qualquer (Recomendo uma pasta onde você deixa os seus programas) e rode o DXTControl.exe, uma janela irá se abrir:
clique em NEW... depois na caixa name digite o nome do jogo, marque active ao lado e selecione o EXECUTAVEL do jogo em path como na figura a seguir:
clique em modules to load, marque preset changer e clique em module properties for preset changer na caixa COUNT digite 2 como a seguir:
pronto agora é só clicar em start e o jogo deve abrir.
toda vez que você quiser usar o triple buffering ou outra opção que existe no dxtweaker você deve iniciar o dxtweaker e clicar em start.
é isso, deve tá cheio de erros esse tutorial mas depois eu do uma revisada.
OBS: eu achei que aqui seria o melhor lugar para colocar isso, se tiver errado o forum, algum moderador troque-o de lugar, mas acho que como é para jogos aqui seria melhor.
tirado e traduzido e feito por:
http://www.ocworkbench.com/2006/articles/DXtweaker/ (onde eu encontrei originalmente)
http://en.wikipedia.org/ (explicações sobre vsync e triple buffering)
diferença de fps no FEAR, on e off triple buffering, ( o que tem fps menores é o off)
Esse tutorial vai deixar você usar o triple buffering com o directx, coisa que normalmente só é possível em opengl.
explicação sobre tirada da wikipedia(traduzida rapidamente):
geralmente monitores são atualizados continuadamente e em antigos monitores crt, um pequeno atraso acontece entre atualizar a menor linha horizontal do monitor até a linha mais alta. Este atraso que continua a existir em equipamentos mais modernos, dá uma oportunidade para que a placa de video altere o conteudo de um framebuffer sem erros visiveis, como gráficos parcialmente desenhados , ou que uma parte superior do monitor mostre um frame a frente e a parte de baixo mostre outro frame (conhecido como tearing).
Agora triple buffering :
outro metodo de triple buffering involve sincronizar o frame rate do monitor, e simplesmente usar o terceiro buffer como um metodo de dar espaço para a demanda variavel no tanto de gráficos desenhados. Isto é, usar o buffer no sentido real onde um buffer age como um reservatorio.
Tal metodo dá um Fps menos variavel do que o normal.
Triple buffering inplica em três buffers, mas o metodo pode ser extendido para quaisquer numero de buffers forem necessarios para a aplicação. Geralmente, não há vantagem alguma em usar mais do que três buffers.
Vantagens do triple buffering:
Se o sistema tem três buffers A, B e c, ele não precisa esperar para trocar de buffers. Ele pode mostrar o buffer B enquanto está montando a imagem no buffer A. Quando ele acabar de renderizar a imagem em A, ele pode começar a renderizar em C imediatamente. Quando o monitor tiver um branco vertical, ele pode mostar o buffer A e fazer o buffer B disponivel para reuso.
Agora a explicação mais simples, do meu jeito:
Vsync impede que você tenha fps mais alto do que o seu monitor pode mostrar, assim você não ve certas falhas como tearing (explicado acima).
Triple buffering, permite que sua placa tenha digamos "frames reservas" e assim o seu fps não irá cair bruscamente.
Porém vsync+triple buffering só funciona em opengl, devido a uma limitação na api do directx.
AGORA UM PORÉM:
Triple buffering parece a solução perfeita para diminuir fps baixo, porém não é de graça. Ativando triple buffering também significa que você precisará de 50% a mais de espaço para buffers. Dentro de certas condições, ele também pode NEGATIVAMENTE impactar a sua experiencia no jogo. Um exemplo simples pode ilustrar este problema em potencial. Vamos dizer que você está rodando um jogo à 1600x1200(resolução alta). Cada pixel precisa de 32bits para guardar informação, 1600x1200x32=61.440.000bits, convertendo para megabytes, dá igual à 7.32mb, para usar double buffering, você precisará de 14.64mb de memória de video, para usar triple buffering, ele requer 21.96mb de memória de video. Ok, é só 21.96mb, não é muito, placas modernas tem geralmente 256mb. PARECE que memoria não seria um problema... porém se nos habilitarmos 4xFSAA, o numero aumenta muito rapido. Com 4xAA há quatro vezes mais pixels sendo desenhados, então você precisa multiplicar 21.96mbx4 o que resulta em 87.84mb. É mais que um terço da ram da sua vga. Se um jogo precisa de 200mb para texturas, light maps, bump maps, normal maps, etc então você vai ter um gameplay muito ruim, com várias pausas devido ao acesso constante com o hd. Isso é apenas algo para você lembrar, que se você ver que o jogo está tendo vários acessos ao hd, pode ser um indicio de que triple buffering está ocupando memoria demais, e é melho desabilita-lo
chega de texto vamo pra parte pratica:
PUXE O .NET (http://www.microsoft.com/downloads/...E3-F589-4842-8157-034D1E7CF3A3&displaylang=en)
puxe o dxtweaker: http://www.nonatainment.de/web/DirectXTweaker/Download/tabid/58/Default.aspx
não se esqueça de pegar a atualização do .net
Extraia o dxtweaker para uma pasta qualquer (Recomendo uma pasta onde você deixa os seus programas) e rode o DXTControl.exe, uma janela irá se abrir:
clique em NEW... depois na caixa name digite o nome do jogo, marque active ao lado e selecione o EXECUTAVEL do jogo em path como na figura a seguir:
clique em modules to load, marque preset changer e clique em module properties for preset changer na caixa COUNT digite 2 como a seguir:
pronto agora é só clicar em start e o jogo deve abrir.
toda vez que você quiser usar o triple buffering ou outra opção que existe no dxtweaker você deve iniciar o dxtweaker e clicar em start.
é isso, deve tá cheio de erros esse tutorial mas depois eu do uma revisada.
OBS: eu achei que aqui seria o melhor lugar para colocar isso, se tiver errado o forum, algum moderador troque-o de lugar, mas acho que como é para jogos aqui seria melhor.
tirado e traduzido e feito por:
http://www.ocworkbench.com/2006/articles/DXtweaker/ (onde eu encontrei originalmente)
http://en.wikipedia.org/ (explicações sobre vsync e triple buffering)
diferença de fps no FEAR, on e off triple buffering, ( o que tem fps menores é o off)