Conectar-se

Esqueci minha senha

Últimos assuntos
» Novo endereço da XCreator
Qua 16 Mar 2011, 08:49 por vinians

» C++? ajuda
Qui 17 Fev 2011, 16:42 por Henrique_GJ

» dúvida em centralizar arma e player
Dom 30 Jan 2011, 17:08 por AndersonXD

» GO linguagem de programação da Google !!
Qui 27 Jan 2011, 21:04 por vinians

» [Duvida]esqueci o código pra mudar o tamanho da room
Qui 13 Jan 2011, 15:12 por mystery_boy_maker

» show_message_ext duvida
Qua 22 Dez 2010, 21:36 por mystery_boy_maker

» Testes com C & Allegro
Seg 13 Dez 2010, 14:31 por vinians

» FreeBasic - Código completo Snake
Seg 13 Dez 2010, 11:13 por tblima123

» Me apresentando...
Sab 11 Dez 2010, 22:26 por vinians

» URL Reverse
Sab 11 Dez 2010, 22:23 por vinians

Parceiros
Seja nosso parceiro, adicione nosso button em seu portal!


• • •

• • •

• • •
[parceiro 3]

FreeBasic - Problemas no Windows 7

Ir em baixo

FreeBasic - Problemas no Windows 7

Mensagem por tblima123 em Seg 29 Nov 2010, 11:23

Pois é, eu estou de PC novo agora!!!

Eu ganhei numa prova que eu fiz ano passado, é uma prova que os alunos de escola publica do Ceará fazem, chama-se SPAECE, e consegui atingir a pontuação pra ganhar um PC (alías se todos os alunos do Ceará tivessem atingindo o estado falia Rolling Eyes )

Porem ele veio com windows 7 pro 32bit Originalzinho, e eu tô gostando, mas há um porem...

Estou encontrando sérias dificuldades de compatibilidade com o freebasic Sad .
Eu testei as bibliotecas Allegro, GL e a padrão, todas dão problemas, varias funções que são executadas com problemas, inclusive a "get" trava se eu copiar pra memoria de trabalho, a "imagedestroy()" tambem trava, inclusive os testes que eu fis no meu velho XP não funfam no 7 Mad .

A minha placa de video uma ATI simples (3100) mas tem opengl 6.14.10.8789 e direct3d8.4.10.0678 .

Eu estive fuçando (quem fuça é porco) uma outro linguagem chamada purebasic, super interessante, e com ele não tive problemas até agora.

Você sabe se isso é problema de freebasic mesmo? Eles pensam em arrumar?

________________________________________________

Tu conhece o purebasic?
Não é free; Sad
Mas funciona em windows, linux, mac e tem uma versão opensource inativa pro amiga;
Tem uma completa biblioteca 2D que opera com DirectX e SDL e uma 3D que opera com OGRE;
Tem uma IDE própria que tem até um construtor de interface gráfica;
Foi originalmete (acho que em 1996) uma extensão do Blitz3D pra desenvolver programas, agora é uma linguagem completa com mais de 1300 funções;
É mais rápida que C++ e quase tão rápida que C.

Tô achando um bcado diferente do freebasic e é paga Sad
Porem não deu nem um problema com o 7 até agora.

No momento eu estou meio em cima do muro.

Tu conhece essa linguagem?


Última edição por tblima123 em Seg 29 Nov 2010, 12:58, editado 2 vez(es) (Razão : Título genérico)
avatar
tblima123
Ocasional

Mensagens : 54
Data de inscrição : 06/11/2009

Voltar ao Topo Ir em baixo

Re: FreeBasic - Problemas no Windows 7

Mensagem por vinians em Seg 29 Nov 2010, 14:20

tblima123 escreveu:Pois é, eu estou de PC novo agora!!!

Eu ganhei numa prova que eu fiz ano passado, é uma prova que os alunos de escola publica do Ceará fazem, chama-se SPAECE, e consegui atingir a pontuação pra ganhar um PC (alías se todos os alunos do Ceará tivessem atingindo o estado falia Rolling Eyes )

Porem ele veio com windows 7 pro 32bit Originalzinho, e eu tô gostando, mas há um porem...

Estou encontrando sérias dificuldades de compatibilidade com o freebasic Sad .
Eu testei as bibliotecas Allegro, GL e a padrão, todas dão problemas, varias funções que são executadas com problemas, inclusive a "get" trava se eu copiar pra memoria de trabalho, a "imagedestroy()" tambem trava, inclusive os testes que eu fis no meu velho XP não funfam no 7 Mad .

A minha placa de video uma ATI simples (3100) mas tem opengl 6.14.10.8789 e direct3d8.4.10.0678 .

Eu estive fuçando (quem fuça é porco) uma outro linguagem chamada purebasic, super interessante, e com ele não tive problemas até agora.

Você sabe se isso é problema de freebasic mesmo? Eles pensam em arrumar?

________________________________________________

Tu conhece o purebasic?
Não é free; Sad
Mas funciona em windows, linux, mac e tem uma versão opensource inativa pro amiga;
Tem uma completa biblioteca 2D que opera com DirectX e SDL e uma 3D que opera com OGRE;
Tem uma IDE própria que tem até um construtor de interface gráfica;
Foi originalmete (acho que em 1996) uma extensão do Blitz3D pra desenvolver programas, agora é uma linguagem completa com mais de 1300 funções;
É mais rápida que C++ e quase tão rápida que C.

Tô achando um bcado diferente do freebasic e é paga Sad
Porem não deu nem um problema com o 7 até agora.

No momento eu estou meio em cima do muro.

Tu conhece essa linguagem?
E ae amigão blz ??
Então, eu acho que pode ser alguma coisa no seu código, ou algum problema de driver da sua placa, não que seja um problema, mas uma incompatibilidade ou coisa do tipo. Só pra voce ter uma idéia, eu uso um Laptop com windows 7, 64 bits e funciona perfeitamente nunca tive problema. Verifique se não é uma opção de link. E no caso de teste com a Allegro, testa ela com C pra ver se fuciona. Se funcionar nao é problema da Allegro e sim de alguma configuração do Free Basic.

Quanto ao Pure Basic eu já dei um bizoi. É interessante sim, mas ficamos muito presos em uma linguagem meio que privada, além de ser cobrada. Acho que se for para usar linguagem paga, use a Blitz Max, que é excelente e tambem roda em Linux (eu tenho e funciona muito bem) tem muitos comandos graficos, som, etc é excelente. Ou então use C mesmo que é um pouco difícil de aprender mas depois fica facil de usar e alem de ter compilador para todas as plataformas existentes.
Flws

_________________
we love to make games!
avatar
vinians
Editor

Masculino
Mensagens : 85
Data de inscrição : 24/08/2009
Localização : Rio de Janeiro

http://www.xcreator.com.br

Voltar ao Topo Ir em baixo

Re: FreeBasic - Problemas no Windows 7

Mensagem por tblima123 em Seg 29 Nov 2010, 16:52

Allegro e fbgfx usam GL?
avatar
tblima123
Ocasional

Mensagens : 54
Data de inscrição : 06/11/2009

Voltar ao Topo Ir em baixo

Re: FreeBasic - Problemas no Windows 7

Mensagem por vinians em Seg 29 Nov 2010, 18:29

Amigão, a Allegro tem driver para usar o OpenGL, já a engine padrão do FB creio que não use. Qualquer engine que for uma "capa" para o DirectX deverá funcionár normalmente, geralmente linguagens multiplataforma não se comunicam diretamente com o DX por motivos de generalização de código.

_________________
we love to make games!
avatar
vinians
Editor

Masculino
Mensagens : 85
Data de inscrição : 24/08/2009
Localização : Rio de Janeiro

http://www.xcreator.com.br

Voltar ao Topo Ir em baixo

Re: FreeBasic - Problemas no Windows 7

Mensagem por tblima123 em Seg 29 Nov 2010, 18:54

Compensa usar DEV-C++ Ao menos pra aprender?

Eu achei a codebocks tão bagunçada, mas gostei da simplicidade da DEV-C++.
Eu goste de coisas simples (mas como você vê, pra mim nunca são...)
avatar
tblima123
Ocasional

Mensagens : 54
Data de inscrição : 06/11/2009

Voltar ao Topo Ir em baixo

Re: FreeBasic - Problemas no Windows 7

Mensagem por vinians em Seg 29 Nov 2010, 19:38

É oque eu sempre digo pro pessoal. Eu gosto muito do DevC++. É velho? É sim. Mas é muito mais limpo e simples de usar. Além disso algumas pessoas, sem conhecimento, chegam a dizer que ele produz "código antigo" sendo que ele é apenas uma IDE, e que voce pode dar download no MinGW (o verdadeiro compilador da GNU) separadamente. Sim, eu prefiro o DevC++ e sugiro que voce o use.

_________________
we love to make games!
avatar
vinians
Editor

Masculino
Mensagens : 85
Data de inscrição : 24/08/2009
Localização : Rio de Janeiro

http://www.xcreator.com.br

Voltar ao Topo Ir em baixo

Re: FreeBasic - Problemas no Windows 7

Mensagem por tblima123 em Seg 29 Nov 2010, 21:12

Bem, eu instalei o dev-cpp, atualizai o mingw, instalei o ultimo allegro que tinha pro dev-cpp.

Quanto ao opengl, funciona tudo, baixei varios exemplos na net, só teve um que não rodou, já com o allegro o bicho pega...
Uns 30% dos exemplos que acompanham o allegro do dev-cpp não rodaram, mas eu olhei uns exemplos bem legais que tem nums site chamado xcreator, se eu não me engano o autor se chama vinians, e funcionaram direitinho. Cool

Agora eu estou em duvida, tá tudo bem ou o Mark Overmars jogou uma praga em mim pra mim não conseguir sair do GM? Mad
avatar
tblima123
Ocasional

Mensagens : 54
Data de inscrição : 06/11/2009

Voltar ao Topo Ir em baixo

Re: FreeBasic - Problemas no Windows 7

Mensagem por vinians em Seg 29 Nov 2010, 21:53

Estranho, tem que analizar, nos exemplos que vem com a Allegro o que está causando o não funcionamento. Pode ser o driver de video que eles estão usando. Eu geralmente uso o AUTODETECT justamente para ele pegar o DirectX no windows Very Happy.

Quanto a praga do GM, acho que pegou em mim tambem Very Happy mas a questão nem é sair dele e sim usar paralelamente ou usar como linguagem-protótipo para alguma engine. Eu estava querendo postar uma Engine que simula o funcionamento da engine de Step do GM mas acho que vai ficar um pouco complicada agora, antes disso preciso postar mais tutoriais sobre C, pois esta engine usara lista encadeada.

_________________
we love to make games!
avatar
vinians
Editor

Masculino
Mensagens : 85
Data de inscrição : 24/08/2009
Localização : Rio de Janeiro

http://www.xcreator.com.br

Voltar ao Topo Ir em baixo

Re: FreeBasic - Problemas no Windows 7

Mensagem por Convidad em Ter 30 Nov 2010, 12:45

Algum tempo atrás eu estava fuçando no FB (fazendo um Pong, pra variar) e não tive problema algum com o win7. No Dev-C++ eu cheguei a fazer uns testes basicões com a Allegro e foi normal, mas não teve nada além de funções simples de desenho primitivo e etc.

Convidad
Convidado


Voltar ao Topo Ir em baixo

Re: FreeBasic - Problemas no Windows 7

Mensagem por vinians em Ter 30 Nov 2010, 13:27

fabio escreveu:Algum tempo atrás eu estava fuçando no FB (fazendo um Pong, pra variar) e não tive problema algum com o win7. No Dev-C++ eu cheguei a fazer uns testes basicões com a Allegro e foi normal, mas não teve nada além de funções simples de desenho primitivo e etc.
E ae amigão sumidaum?? AAHHAHAHA que bom que você está participando!
Comigo tambem foi normal, roda tranquilo no meu notebook com windows 7 e ainda 64 bits, tanto a C + Allegro como FB + Allegro.

_________________
we love to make games!
avatar
vinians
Editor

Masculino
Mensagens : 85
Data de inscrição : 24/08/2009
Localização : Rio de Janeiro

http://www.xcreator.com.br

Voltar ao Topo Ir em baixo

Re: FreeBasic - Problemas no Windows 7

Mensagem por tblima123 em Ter 30 Nov 2010, 16:23

Olha esse código que eu fiz baseado num exemplo:

Código:

Screenres 600, 400, 32, 2
Screenset(0, 1)
#Include "fbgfx.bi"

Dim farinha_de_trigo(1 To 2) As fb.image Ptr
farinha_de_trigo(1) = imagecreate(200, 200)             
BLoad("char.bmp", 0)
Get (0, 0) - (200, 200), farinha_de_trigo(1)
Cls()
Put (0, 0), farinha_de_trigo(1), trans
Screencopy()

imagedestroy(farinha_de_trigo(1))
Sleep

Ele roda, mas depois o windows fecha ele dizendo que ele não está respondendo.

Esse é OpenGL:
Código:

''========================================================================
'' This is a small test application for GLFW.
'' The program uses a "split window" view, rendering four views of the
'' same scene in one window (e.g. uesful for 3D modelling software). This
'' demo uses scissors to separete the four different rendering areas from
'' each other.
''
'' (If the code seems a little bit strange here and there, it may be
''  because I am not a friend of orthogonal projections)
''========================================================================

#include once "GL/gl.bi"
#include once "GL/glu.bi"
#include once "GL/glfw.bi"

#define NULL 0
#define FALSE 0
#define TRUE not FALSE

#ifndef PI
#define PI 3.14159265358979323846
#endif

''========================================================================
'' Global variables
''========================================================================

''
dim shared as integer doredraw

'' Mouse position
dim shared as integer xpos, ypos

'' Window size
dim shared as integer width_, height

'' Active view: 0 = none, 1 = upper left, 2 = upper right, 3 = lower left,
'' 4 = lower right
dim shared as integer active_view = 0

'' Rotation around each axis
dim shared as integer rot_x, rot_y, rot_z


''========================================================================
'' DrawTorus() - Draw a solid torus (use a display list for the model)
''========================================================================

#define TORUS_MAJOR    1.5
#define TORUS_MINOR    0.5
#define TORUS_MAJOR_RES 32
#define TORUS_MINOR_RES 32

sub DrawTorus( )
    static as GLuint torus_list = 0
    dim as integer i, j, k
    dim as double s, t, x, y, z, nx, ny, nz, scale, twopi

    if( torus_list = 0 ) then
        '' Start recording displaylist
        torus_list = glGenLists( 1 )
        glNewList( torus_list, GL_COMPILE_AND_EXECUTE )

        '' Draw torus
        twopi = 2.0 * PI
        for i = 0 to TORUS_MINOR_RES-1
            glBegin( GL_QUAD_STRIP )
            for j = 0 to TORUS_MAJOR_RES
                for k = 1 to 0 step -1
                    s = (i + k) mod TORUS_MINOR_RES + 0.5
                    t = j mod TORUS_MAJOR_RES

                    '' Calculate point on surface
                    x = (TORUS_MAJOR+TORUS_MINOR*cos(s*twopi/TORUS_MINOR_RES))*cos(t*twopi/TORUS_MAJOR_RES)
                    y = TORUS_MINOR * sin(s * twopi / TORUS_MINOR_RES)
                    z = (TORUS_MAJOR+TORUS_MINOR*cos(s*twopi/TORUS_MINOR_RES))*sin(t*twopi/TORUS_MAJOR_RES)

                    '' Calculate surface normal
                    nx = x - TORUS_MAJOR*cos(t*twopi/TORUS_MAJOR_RES)
                    ny = y
                    nz = z - TORUS_MAJOR*sin(t*twopi/TORUS_MAJOR_RES)
                    scale = 1.0 / sqr( nx*nx + ny*ny + nz*nz )
                    nx *= scale
                    ny *= scale
                    nz *= scale

                    glNormal3f( nx, ny, nz )
                    glVertex3f( x, y, z )
                next
            next
            glEnd()
        next

        '' Stop recording displaylist
        glEndList()
    else
        '' Playback displaylist
        glCallList( torus_list )
    end if
end sub


''========================================================================
'' DrawScene() - Draw the scene (a rotating torus)
''========================================================================

sub DrawScene(  )
   static as GLfloat model_diffuse(0 to 3) = { 1.0, 0.8, 0.8, 1.0 }
   static as GLfloat model_specular(0 to 3) = { 0.6, 0.6, 0.6, 1.0 }
   static as GLfloat model_shininess = 20.0

    glPushMatrix( )
   
    '' Rotate the object
    glRotatef( rot_x*0.5, 1.0, 0.0, 0.0 )
    glRotatef( rot_y*0.5, 0.0, 1.0, 0.0 )
    glRotatef( rot_z*0.5, 0.0, 0.0, 1.0 )

    '' Set model color (used for orthogonal views, lighting disabled)
    glColor4fv( @model_diffuse(0) )

    '' Set model material (used for perspective view, lighting enabled)
    glMaterialfv( GL_FRONT, GL_DIFFUSE, @model_diffuse(0) )
    glMaterialfv( GL_FRONT, GL_SPECULAR, @model_specular(0) )
    glMaterialf(  GL_FRONT, GL_SHININESS, model_shininess )

    '' Draw torus
    DrawTorus()

    glPopMatrix()
end sub


''========================================================================
'' DrawGrid() - Draw a 2D grid (used for orthogonal views)
''========================================================================

sub DrawGrid( byval scale as single, byval steps as integer )
    dim as integer i
    dim as single x, y

    glPushMatrix( )

    '' Set background to some dark bluish grey
    glClearColor( 0.05, 0.05, 0.2, 0.0)
    glClear( GL_COLOR_BUFFER_BIT )

    '' Setup modelview matrix (flat XY view)
    glLoadIdentity( )
    gluLookAt( 0.0, 0.0, 1.0, _
              0.0, 0.0, 0.0, _
              0.0, 1.0, 0.0 )

    '' We don't want to update the Z-buffer
    glDepthMask( GL_FALSE )

    '' Set grid color
    glColor3f( 0.0, 0.5, 0.5 )

    glBegin( GL_LINES )

    '' Horizontal lines
    x = scale * 0.5 * (steps-1)
    y = -scale * 0.5 * (steps-1)
    for i = 0 to steps-1
        glVertex3f( -x, y, 0.0 )
        glVertex3f( x, y, 0.0 )
        y += scale
    next

    '' Vertical lines
    x = -scale * 0.5 * (steps-1)
    y = scale * 0.5 * (steps-1)
    for i = 0 to steps-1
        glVertex3f( x, -y, 0.0 )
        glVertex3f( x, y, 0.0 )
        x += scale
    next

    glEnd()

    '' Enable Z-buffer writing again
    glDepthMask( GL_TRUE )

    glPopMatrix()
end sub


''========================================================================
'' DrawAllViews()
''========================================================================

sub DrawAllViews( )
   static as GLfloat light_position(0 to 3) = { 0.0, 8.0, 8.0, 1.0 }
   static as GLfloat light_diffuse(0 to 3) = { 1.0, 1.0, 1.0, 1.0 }
   static as GLfloat light_specular(0 to 3) = { 1.0, 1.0, 1.0, 1.0 }
   static as GLfloat light_ambient(0 to 3) = { 0.2, 0.2, 0.3, 1.0 }
    dim as double aspect

    '' Calculate aspect of window
    if( height > 0 ) then
        aspect = width_ / height
    else
        aspect = 1.0
    end if

    '' Clear screen
    glClearColor( 0.0, 0.0, 0.0, 0.0 )
    glClear( GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT )

    '' Enable scissor test
    glEnable( GL_SCISSOR_TEST )

    '' Enable depth test
    glEnable( GL_DEPTH_TEST )
    glDepthFunc( GL_LEQUAL )


    '' ** ORTHOGONAL VIEWS **

    '' For orthogonal views, use wireframe rendering
    glPolygonMode( GL_FRONT_AND_BACK, GL_LINE )

    '' Enable line anti-aliasing
    glEnable( GL_LINE_SMOOTH )
    glEnable( GL_BLEND )
    glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA )

    '' Setup orthogonal projection matrix
    glMatrixMode( GL_PROJECTION )
    glLoadIdentity( )
    glOrtho( -3.0*aspect, 3.0*aspect, -3.0, 3.0, 1.0, 50.0 )

    '' Upper left view (TOP VIEW)
    glViewport( 0, height\2, width_\2, height\2 )
    glScissor( 0, height\2, width_\2, height\2 )
    glMatrixMode( GL_MODELVIEW )
    glLoadIdentity()
    gluLookAt( 0.0, 10.0, 1e-3, _  '' Eye-position (above)
              0.0, 0.0, 0.0,  _  '' View-point
              0.0, 1.0, 0.0 )    '' Up-vector
    DrawGrid( 0.5, 12 )
    DrawScene( )

    '' Lower left view (FRONT VIEW)
    glViewport( 0, 0, width_\2, height\2 )
    glScissor( 0, 0, width_\2, height\2 )
    glMatrixMode( GL_MODELVIEW )
    glLoadIdentity( )
    gluLookAt( 0.0, 0.0, 10.0, _  '' Eye-position (in front of)
              0.0, 0.0, 0.0,  _  '' View-point
              0.0, 1.0, 0.0 )    '' Up-vector
    DrawGrid( 0.5, 12 )
    DrawScene()

    '' Lower right view (SIDE VIEW)
    glViewport( width_\2, 0, width_\2, height\2 )
    glScissor( width_\2, 0, width_\2, height\2 )
    glMatrixMode( GL_MODELVIEW )
    glLoadIdentity()
    gluLookAt( 10.0, 0.0, 0.0, _  '' Eye-position (to the right)
              0.0, 0.0, 0.0,  _  '' View-point
              0.0, 1.0, 0.0 )    '' Up-vector
    DrawGrid( 0.5, 12 )
    DrawScene( )

    '' Disable line anti-aliasing
    glDisable( GL_LINE_SMOOTH )
    glDisable( GL_BLEND )


    '' ** PERSPECTIVE VIEW **

    '' For perspective view, use solid rendering
    glPolygonMode( GL_FRONT_AND_BACK, GL_FILL )

    '' Enable face culling (faster rendering)
    glEnable( GL_CULL_FACE )
    glCullFace( GL_BACK )
    glFrontFace( GL_CW )

    '' Setup perspective projection matrix
    glMatrixMode( GL_PROJECTION )
    glLoadIdentity( )
    gluPerspective( 65.0, aspect, 1.0, 50.0 )

    '' Upper right view (PERSPECTIVE VIEW)
    glViewport( width_\2, height\2, width_\2, height\2 )
    glScissor( width_\2, height\2, width_\2, height\2 )
    glMatrixMode( GL_MODELVIEW )
    glLoadIdentity()
    gluLookAt( 3.0, 1.5, 3.0, _    '' Eye-position
              0.0, 0.0, 0.0, _    '' View-point
              0.0, 1.0, 0.0 )    '' Up-vector

    '' Configure and enable light source 1
    glLightfv( GL_LIGHT1, GL_POSITION, @light_position(0) )
    glLightfv( GL_LIGHT1, GL_AMBIENT, @light_ambient(0) )
    glLightfv( GL_LIGHT1, GL_DIFFUSE, @light_diffuse(0) )
    glLightfv( GL_LIGHT1, GL_SPECULAR, @light_specular(0) )
    glEnable( GL_LIGHT1 )
    glEnable( GL_LIGHTING )

    '' Draw scene
    DrawScene( )

    '' Disable lighting
    glDisable( GL_LIGHTING )

    '' Disable face culling
    glDisable( GL_CULL_FACE )

    '' Disable depth test
    glDisable( GL_DEPTH_TEST )

    '' Disable scissor test
    glDisable( GL_SCISSOR_TEST )


    '' Draw a border around the active view
    if( active_view > 0 and active_view <> 2 ) then
        glViewport( 0, 0, width_, height )
        glMatrixMode( GL_PROJECTION )
        glLoadIdentity()
        glOrtho( 0.0, 2.0, 0.0, 2.0, 0.0, 1.0 )
        glMatrixMode( GL_MODELVIEW )
        glLoadIdentity()
        glColor3f( 1.0, 1.0, 0.6 )
        glTranslatef( (active_view-1) and 1, 1-(active_view-1)\2, 0.0 )
        glBegin( GL_LINE_STRIP )
          glVertex2i( 0, 0 )
          glVertex2i( 1, 0 )
          glVertex2i( 1, 1 )
          glVertex2i( 0, 1 )
          glVertex2i( 0, 0 )
        glEnd()
    end if
end sub


''========================================================================
'' WindowSizeFun() - Window size callback function
''========================================================================

sub WindowSizeFun GLFWCALL( byval w as integer, byval h as integer )
    width_  = w
    height = iif( h > 0, h, 1 )
   
    doredraw = TRUE
end sub

''========================================================================
'' MousePosFun() - Mouse position callback function
''========================================================================

sub MousePosFun GLFWCALL ( byval x as integer, byval y as integer )
    '' Depending on which view was selected, rotate around different axes
    select case active_view
        case 1
            rot_x += y - ypos
            rot_z += x - xpos
        case 3
            rot_x += y - ypos
            rot_y += x - xpos
        case 4
            rot_y += x - xpos
            rot_z += y - ypos
        case else
            '' Do nothing for perspective view, or if no view is selected
    end select

    '' Remember mouse position
    xpos = x
    ypos = y
   
    if( active_view <> 0 ) then
       doredraw = TRUE
    end if
end sub


''========================================================================
'' MouseButtonFun() - Mouse button callback function
''========================================================================

sub MouseButtonFun GLFWCALL ( byval button as integer, byval action as integer )
   
    '' Button clicked?
    select case button
    case GLFW_MOUSE_BUTTON_LEFT
       
       if( action = GLFW_PRESS ) then
           '' Detect which of the four views was clicked
           active_view = 1
           if( xpos >= width_\2 ) then
               active_view += 1
         end if           
           if( ypos >= height\2 ) then
               active_view += 2
           end if
           
       '' Button released?
       else
           '' Deselect any previously selected view
           active_view = 0
        end if
       
        doredraw = TRUE
   
    end select
   
end sub


''========================================================================
'' main()
''========================================================================

    dim as integer running

    '' Initialise GLFW
    glfwInit( )

    '' Open OpenGL window
    if( glfwOpenWindow( 500, 500, 0,0,0,0, 16,0, GLFW_WINDOW ) = 0 ) then
        glfwTerminate()
       end 0
    end if

    '' Set window title
    glfwSetWindowTitle( "Split view demo" )

    '' Enable sticky keys
    glfwEnable( GLFW_STICKY_KEYS )

    '' Enable mouse cursor (only needed for fullscreen mode)
    glfwEnable( GLFW_MOUSE_CURSOR )

    '' Set callback functions
    glfwSetWindowSizeCallback( @WindowSizeFun )
    glfwSetMousePosCallback( @MousePosFun )
    glfwSetMouseButtonCallback( @MouseButtonFun )

    '' Main loop
    doredraw = TRUE

    do
        if( doredraw ) then
           doredraw = FALSE
           
           '' Draw all views
           DrawAllViews( )
           
        else
       
           '' Idle process
           glfwSleep( 0.025 )
           
        end if

        '' Swap buffers
        glfwSwapBuffers( )
           
        '' Check if the ESC key was pressed or the window was closed
        running = (glfwGetKey( GLFW_KEY_ESC ) = 0) and _
                  (glfwGetWindowParam( GLFW_OPENED ) = 1)
    loop while( running )

    '' Close OpenGL window and terminate GLFW
    glfwTerminate( )

   end 0

Roda mas com uma instabilidade estranha, as "rosquinha" ficam tremendo e às vezes a janelinha piscando.

Tem um outro exemplo do FreeBasic chamado "glext_text.bas" que é a mesma, funfa, mas tremendo, dessa vez só não fica piscando. Tem uns outros exemplos que não funcionam pois tão sem as DLLs, esses eu perdôo Wink

Com allegro + FB só tá dando incompatibilida com o modo gráfico padrão do windows mas o windows vai pro modo correto sózinho, é só não apertar no X dá janela do allegro que não trava (usar ESC).

Ei fabio, mostra depois teu pong prá nós, tá? só por ser em FB eu já creio que é o melhor. Wink

Aproveitando a oportunida, como o Freebasic se sai em testes de desempenho, ele é rápido, ou até o game maker dá surra nele?
avatar
tblima123
Ocasional

Mensagens : 54
Data de inscrição : 06/11/2009

Voltar ao Topo Ir em baixo

Re: FreeBasic - Problemas no Windows 7

Mensagem por Convidad em Ter 30 Nov 2010, 23:15

E ae amigão sumidaum?? AAHHAHAHA que bom que você está participando!
É sempre assim, vc fica semanas sem dar as caras e os outros é que são os sumidões XPP
Olha esse código que eu fiz baseado num exemplo:
Dim farinha_de_trigo
Ele roda, mas depois o windows fecha ele dizendo que ele não está respondendo.
Vai ver é a farinha que vc usou... tenta com a Dona Benta...

/taparei

Ei fabio, mostra depois teu pong prá nós, tá? só por ser em FB eu já creio que é o melhor.
O Pong ficou meio inacabado pq eu tava tentando adicionar uma aceleração na bola cada vez que era rebatida só que na 3° vez ela já pegava uma velocidade exorbitante e acabei não continuando >.<... mas se quiser tem um brick braker que tá mais apresentável
Código:
'----------------------
' chamando bibliotecas
'----------------------

#Include "fbgfx.bi" 'contém as constantes/códigos das teclas
#Include "windows.bi" '<DESCRIÇÃO PENDENTE>
#Include "win/mmsystem.bi" '<DESCRIÇÃO PENDENTE>

'-----------------------------
' iniciando interface gráfica
'-----------------------------

Windowtitle "Brick Breaker 0.1" 'define o texto da barra de título da janela

Screenres 640, 480, 32, 2, 0 'inicia o modo gráfico com uma janela de 640x480px em 32bits de cor e 2 camadas de buffer
Screenset 1, 0 'indica a camada de trabalho
             
'----------------------
' declarando variáveis
'----------------------

Dim Shared As Integer sc = 0 'pontuação inicial
Dim Shared As Integer lf = 5 'vidas iniciais
Dim Shared As Integer pdX = 320 'posição X da raquete
Dim Shared As Integer pdY = 430 'posição Y da raquete
Dim Shared As Integer pdSp = 3 'velocidade da raquete
Dim Shared As Integer blX = 320 'posição X da bola
Dim Shared As Integer blY = 400 'posição Y da bola
Dim Shared As Integer blXSp 'velocidade horizontal da bola
Dim Shared As Integer blYSp = - 2 'velocidade vertical da bola
Dim Shared As Integer blAng = 0 'ângulo de rebatida da bola
Dim Shared As Integer brX (1 To 10, 1 To 6) 'matriz 10 x 6 de posição X dos blocos
Dim Shared As Integer brY (1 To 6) 'vetor 1 x 6 de posição Y dos blocos
Dim Shared As Integer blN = 0 'contador de blocos na tela
Dim Shared As Integer brAct (1 To 10, 1 To 6) 'matriz 10 x 6 de status dos blocos
Dim Shared As Integer i 'auxiliar para uso no For
Dim Shared As Integer j 'auxiliar para uso no For

For i = 1 To 10 Step 1
    For j = 1 To 6 Step 1
        brX(i, j) = 58 * i 'define as posições X dos blocos em múltiplos de 58 pixels
    Next
Next

For i = 1 To 6 Step 1
    brY(i) = 32 + (24 * i) 'define as posições Y dos blocos em múltiplos de 24 pixels
Next

Dim Shared As Integer gmStrt = 0 'indicador para pausa de início de jogo
Dim Shared As Integer cl (1 To 8) 'vetor 1 x 8 de cores
cl(1) = Rgb(192, 88, 88) 'pré-definição de cores
cl(2) = Rgb(160, 160, 52)
cl(3) = Rgb(92, 156, 92)
cl(4) = Rgb(80, 132, 172)
cl(5) = Rgb(140, 88, 184)
cl(6) = Rgb(176, 88, 156)
cl(7) = Rgb(192, 104, 72)
cl(8) = Rgb(144, 144, 144)

'--------------------
' declarando funções
'--------------------

Sub rdDir()
    If Rnd(1) > 0.5 Then 'sorteia direção inicial da bola entre direita e esquerda
        blXSp = 2
    Else
        blXsp = -2
    EndIf
End Sub

Sub rsBlk()
    For i = 1 To 10 Step 1
        For j = 1 To 6 Step 1
            brAct(i, j) = 1 'inicia todos os blocos como ativos
            blN = blN + 1 'soma o total de blocos
        Next
    Next
End Sub

Sub dwBlk()
    Circle(brX(i, j) - 16, brY(j) + 8), 8, cl(j), , , , f 'desenha a extremidade esquerda do bloco
    Line(brX(i, j) - 16, brY(j)) - (brX(i, j) + 16, brY(j) + 16), cl(j), bf 'desenha a parte central do bloco
    Circle(brX(i, j) + 16, brY(j) + 8), 8, cl(j), , , , f 'desenha a extremidade direita do bloco
End Sub

Sub sfPlay(ByVal filename As String) '<DESCRIÇÃO PENDENTE>
    SndPlaySound(filename, SND_ASYNC Or SND_FILENAME)
End Sub

'-----------------
' bloco principal
'-----------------

rdDir() 'executa a função

For i = 1 To 10 Step 1
    For j = 1 To 6 Step 1
        brAct(i, j) = 1 'inicia todos os blocos como ativos
    Next
Next

Do 'loop principal do jogo
   
    blX = blX + blXSp 'inicia o movimento horizontal da bola
    blY = blY + blYsp 'inicia o movimento vertical da bola
   
    If blX <= 8 Then 'rebate a bola na borda esquerda da tela
        blXsp = blXsp * -1
        sfPlay("beep2.wav") 'emite o som
    EndIf
   
    If blX >= 632 Then 'rebate a bola na borda direita da tela
        blXsp = blXsp * -1
        sfPlay("beep2.wav") 'emite o som
    EndIf
   
    If blY <= 8 Then 'rebate a bola na borda superior da tela
        blYsp = blYsp * -1
        sfPlay("beep2.wav") 'emite o som
    EndIf
   
    If blY > 496 Then 'checa se a bola passou da borda inferior
        If lf > 0 Then 'checa quantidade de vidas
            lf = lf - 1 'decresce 1 vida
        Else
            Sleep(5000) 'pausa por alguns instantes
            lf = 5 'reseta os contadores
            sc = 0
           
            rsBlk() 'executa a função
        EndIf   
       
        pdX = 320 'reseta as variáveis principais
        pdY = 430
        blX = 320
        blY = 400

        rdDir()
       
        blYSp = - 2
        blAng = 0
        gmStrt = 0
    EndIf
   
    If (blX + 8 >= pdX - 48) And (blX - 8 <= pdX + 48) And (blY + 8 >= pdY - 8) And (blY + 8 <= pdY + 8) Then 'checa colisão da bola com a raquete
        blAng = pdX - blX 'checa em que ponto da raquete a bola colidiu
        blXsp = (blAng / 10) * -1 'desvia a direção da bola conforme a condição acima
        blYsp = blYsp * -1 'rebate a bola
        sfPlay("beep1.wav") 'emite o som
    EndIf
   
    If Multikey(FB.SC_LEFT) And (pdX > 48) Then 'se houver espaço move a raquete pra esquerda
        pdX = pdX - pdSp
    EndIf
   
    If Multikey(FB.SC_RIGHT) And (pdX < 592) Then 'se houver espaço move a raquete pra direita
        pdX = pdX + pdSp
    EndIf
           
    Cls() 'limpa a tela
   
    Draw String(8, 8), "PONTOS " + Str(sc), Rgb(255, 255, 255) 'desenha a contagem de pontos
    Draw String(578, 8), "VIDAS " + Str(lf), Rgb(255, 255, 255) 'desenha a contagem de vidas
    'Draw String(276, 8), "FIM DE JOGO!", Rgb(255, 255, 255) 'desenha o texto
   
    For i = 1 To 10 Step 1
        For j = 1 To 6 Step 1
           
            If brAct(i, j) = 1 Then
                Select Case j
                    Case 1 To 6
                        dwBlk() 'executa a função
                End Select

                If (blX + 8 >= brX(i, j) - 24) And (blX - 8 <= brX(i, j) + 24) Then 'checa colisão da bola com os blocos
                    If (blY + 8 >= brY(j) - 8) And (blY - 8 <= brY(j) + 8) Then
                        sc = sc + 100 'soma 100 pontos
                        blYsp = blYsp * -1 'rebate a bola
                        sfPlay("beep3.wav") 'emite o som
                        blN = blN - 1 'decresce o contador de blocos
                        brAct(i, j) = 0 'desativa o bloco
                    EndIf
                EndIf
           
            EndIf
           
        Next
    Next
   
    Circle(blX, blY), 8, cl(7), , , , f 'desenha a bola
         
    Circle(pdX - 40, pdY), 8, cl(8), , , , f 'desenha a extremidade esquerda da raquete
    Line(pdX - 40, pdY - 8)-(pdX + 40, pdY + 8), cl(8), bf 'desenha a parte central da raquete
    Circle(pdX + 40, pdY), 8, cl(8), , , , f 'desenha a extremidade direita da raquete
 
    Sleep(5)
   
    Screencopy() 'transfere o buffer para a tela

    If blN <= 0 Then 'se não houver mais blocos ativos
        Sleep(2000) 'pausa por alguns instantes   
   
        rsBlk() 'executa a função
   
        pdX = 320 'reseta as variáveis principais
        pdY = 430
        blX = 320
        blY = 400

        rdDir() 'executa a função
       
        blYSp = - 2
        blAng = 0
        gmStrt = 0
    EndIf
 
    If gmStrt = 0 Then
        Sleep(1000, 1) 'dá uma pausa no início do jogo
        gmStrt = 1
    EndIf

Loop While (Not Multikey(FB.SC_ESCAPE)) And (Inkey$ <> Chr(255) + "k")
Nesse faltou trabalhar a fonte do HUD e se bem me lembro não cheguei a implementar o game over, mas dá pra jogar =P

como o Freebasic se sai em testes de desempenho, ele é rápido, ou até o game maker dá surra nele?
Acho que o problema do GM nesse caso é que dependendo do que vc usar, com pouca "carga" ele já abre as perna, enquanto com essas linguagens como o Basic e o C a coisa parece se manter mais sólida.
Um teste legalzinho que dá pra fazer no GM é criar algo semelhante a aqueles jogos em Flash que tem diversos objetos andando pela tela e ao clicar em um ele se expande e ativa os demais na colisão (reação em cadeia)... basta carregar um pouco a tela ou os efeitos que já dá uns "slowdown" bisonho.
Seria legal comparar no FB ou C, mas imagino que seja muito mais complicado manipular esse tipo de colisão pra poder gerar o sistema.

flw

Convidad
Convidado


Voltar ao Topo Ir em baixo

Re: FreeBasic - Problemas no Windows 7

Mensagem por vinians em Qua 01 Dez 2010, 10:03

tblima123 escreveu:Olha esse código que eu fiz baseado num exemplo:

Código:

Screenres 600, 400, 32, 2
Screenset(0, 1)
#Include "fbgfx.bi"

Dim farinha_de_trigo(1 To 2) As fb.image Ptr
farinha_de_trigo(1) = imagecreate(200, 200)             
BLoad("char.bmp", 0)
Get (0, 0) - (200, 200), farinha_de_trigo(1)
Cls()
Put (0, 0), farinha_de_trigo(1), trans
Screencopy()

imagedestroy(farinha_de_trigo(1))
Sleep

Ele roda, mas depois o windows fecha ele dizendo que ele não está respondendo.

Esse é OpenGL:
Código:

''========================================================================
'' This is a small test application for GLFW.
'' The program uses a "split window" view, rendering four views of the
'' same scene in one window (e.g. uesful for 3D modelling software). This
'' demo uses scissors to separete the four different rendering areas from
'' each other.
''
'' (If the code seems a little bit strange here and there, it may be
''  because I am not a friend of orthogonal projections)
''========================================================================

#include once "GL/gl.bi"
#include once "GL/glu.bi"
#include once "GL/glfw.bi"

#define NULL 0
#define FALSE 0
#define TRUE not FALSE

#ifndef PI
#define PI 3.14159265358979323846
#endif

''========================================================================
'' Global variables
''========================================================================

''
dim shared as integer doredraw

'' Mouse position
dim shared as integer xpos, ypos

'' Window size
dim shared as integer width_, height

'' Active view: 0 = none, 1 = upper left, 2 = upper right, 3 = lower left,
'' 4 = lower right
dim shared as integer active_view = 0

'' Rotation around each axis
dim shared as integer rot_x, rot_y, rot_z


''========================================================================
'' DrawTorus() - Draw a solid torus (use a display list for the model)
''========================================================================

#define TORUS_MAJOR    1.5
#define TORUS_MINOR    0.5
#define TORUS_MAJOR_RES 32
#define TORUS_MINOR_RES 32

sub DrawTorus( )
    static as GLuint torus_list = 0
    dim as integer i, j, k
    dim as double s, t, x, y, z, nx, ny, nz, scale, twopi

    if( torus_list = 0 ) then
        '' Start recording displaylist
        torus_list = glGenLists( 1 )
        glNewList( torus_list, GL_COMPILE_AND_EXECUTE )

        '' Draw torus
        twopi = 2.0 * PI
        for i = 0 to TORUS_MINOR_RES-1
            glBegin( GL_QUAD_STRIP )
            for j = 0 to TORUS_MAJOR_RES
                for k = 1 to 0 step -1
                    s = (i + k) mod TORUS_MINOR_RES + 0.5
                    t = j mod TORUS_MAJOR_RES

                    '' Calculate point on surface
                    x = (TORUS_MAJOR+TORUS_MINOR*cos(s*twopi/TORUS_MINOR_RES))*cos(t*twopi/TORUS_MAJOR_RES)
                    y = TORUS_MINOR * sin(s * twopi / TORUS_MINOR_RES)
                    z = (TORUS_MAJOR+TORUS_MINOR*cos(s*twopi/TORUS_MINOR_RES))*sin(t*twopi/TORUS_MAJOR_RES)

                    '' Calculate surface normal
                    nx = x - TORUS_MAJOR*cos(t*twopi/TORUS_MAJOR_RES)
                    ny = y
                    nz = z - TORUS_MAJOR*sin(t*twopi/TORUS_MAJOR_RES)
                    scale = 1.0 / sqr( nx*nx + ny*ny + nz*nz )
                    nx *= scale
                    ny *= scale
                    nz *= scale

                    glNormal3f( nx, ny, nz )
                    glVertex3f( x, y, z )
                next
            next
            glEnd()
        next

        '' Stop recording displaylist
        glEndList()
    else
        '' Playback displaylist
        glCallList( torus_list )
    end if
end sub


''========================================================================
'' DrawScene() - Draw the scene (a rotating torus)
''========================================================================

sub DrawScene(  )
   static as GLfloat model_diffuse(0 to 3) = { 1.0, 0.8, 0.8, 1.0 }
   static as GLfloat model_specular(0 to 3) = { 0.6, 0.6, 0.6, 1.0 }
   static as GLfloat model_shininess = 20.0

    glPushMatrix( )
   
    '' Rotate the object
    glRotatef( rot_x*0.5, 1.0, 0.0, 0.0 )
    glRotatef( rot_y*0.5, 0.0, 1.0, 0.0 )
    glRotatef( rot_z*0.5, 0.0, 0.0, 1.0 )

    '' Set model color (used for orthogonal views, lighting disabled)
    glColor4fv( @model_diffuse(0) )

    '' Set model material (used for perspective view, lighting enabled)
    glMaterialfv( GL_FRONT, GL_DIFFUSE, @model_diffuse(0) )
    glMaterialfv( GL_FRONT, GL_SPECULAR, @model_specular(0) )
    glMaterialf(  GL_FRONT, GL_SHININESS, model_shininess )

    '' Draw torus
    DrawTorus()

    glPopMatrix()
end sub


''========================================================================
'' DrawGrid() - Draw a 2D grid (used for orthogonal views)
''========================================================================

sub DrawGrid( byval scale as single, byval steps as integer )
    dim as integer i
    dim as single x, y

    glPushMatrix( )

    '' Set background to some dark bluish grey
    glClearColor( 0.05, 0.05, 0.2, 0.0)
    glClear( GL_COLOR_BUFFER_BIT )

    '' Setup modelview matrix (flat XY view)
    glLoadIdentity( )
    gluLookAt( 0.0, 0.0, 1.0, _
              0.0, 0.0, 0.0, _
              0.0, 1.0, 0.0 )

    '' We don't want to update the Z-buffer
    glDepthMask( GL_FALSE )

    '' Set grid color
    glColor3f( 0.0, 0.5, 0.5 )

    glBegin( GL_LINES )

    '' Horizontal lines
    x = scale * 0.5 * (steps-1)
    y = -scale * 0.5 * (steps-1)
    for i = 0 to steps-1
        glVertex3f( -x, y, 0.0 )
        glVertex3f( x, y, 0.0 )
        y += scale
    next

    '' Vertical lines
    x = -scale * 0.5 * (steps-1)
    y = scale * 0.5 * (steps-1)
    for i = 0 to steps-1
        glVertex3f( x, -y, 0.0 )
        glVertex3f( x, y, 0.0 )
        x += scale
    next

    glEnd()

    '' Enable Z-buffer writing again
    glDepthMask( GL_TRUE )

    glPopMatrix()
end sub


''========================================================================
'' DrawAllViews()
''========================================================================

sub DrawAllViews( )
   static as GLfloat light_position(0 to 3) = { 0.0, 8.0, 8.0, 1.0 }
   static as GLfloat light_diffuse(0 to 3) = { 1.0, 1.0, 1.0, 1.0 }
   static as GLfloat light_specular(0 to 3) = { 1.0, 1.0, 1.0, 1.0 }
   static as GLfloat light_ambient(0 to 3) = { 0.2, 0.2, 0.3, 1.0 }
    dim as double aspect

    '' Calculate aspect of window
    if( height > 0 ) then
        aspect = width_ / height
    else
        aspect = 1.0
    end if

    '' Clear screen
    glClearColor( 0.0, 0.0, 0.0, 0.0 )
    glClear( GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT )

    '' Enable scissor test
    glEnable( GL_SCISSOR_TEST )

    '' Enable depth test
    glEnable( GL_DEPTH_TEST )
    glDepthFunc( GL_LEQUAL )


    '' ** ORTHOGONAL VIEWS **

    '' For orthogonal views, use wireframe rendering
    glPolygonMode( GL_FRONT_AND_BACK, GL_LINE )

    '' Enable line anti-aliasing
    glEnable( GL_LINE_SMOOTH )
    glEnable( GL_BLEND )
    glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA )

    '' Setup orthogonal projection matrix
    glMatrixMode( GL_PROJECTION )
    glLoadIdentity( )
    glOrtho( -3.0*aspect, 3.0*aspect, -3.0, 3.0, 1.0, 50.0 )

    '' Upper left view (TOP VIEW)
    glViewport( 0, height\2, width_\2, height\2 )
    glScissor( 0, height\2, width_\2, height\2 )
    glMatrixMode( GL_MODELVIEW )
    glLoadIdentity()
    gluLookAt( 0.0, 10.0, 1e-3, _  '' Eye-position (above)
              0.0, 0.0, 0.0,  _  '' View-point
              0.0, 1.0, 0.0 )    '' Up-vector
    DrawGrid( 0.5, 12 )
    DrawScene( )

    '' Lower left view (FRONT VIEW)
    glViewport( 0, 0, width_\2, height\2 )
    glScissor( 0, 0, width_\2, height\2 )
    glMatrixMode( GL_MODELVIEW )
    glLoadIdentity( )
    gluLookAt( 0.0, 0.0, 10.0, _  '' Eye-position (in front of)
              0.0, 0.0, 0.0,  _  '' View-point
              0.0, 1.0, 0.0 )    '' Up-vector
    DrawGrid( 0.5, 12 )
    DrawScene()

    '' Lower right view (SIDE VIEW)
    glViewport( width_\2, 0, width_\2, height\2 )
    glScissor( width_\2, 0, width_\2, height\2 )
    glMatrixMode( GL_MODELVIEW )
    glLoadIdentity()
    gluLookAt( 10.0, 0.0, 0.0, _  '' Eye-position (to the right)
              0.0, 0.0, 0.0,  _  '' View-point
              0.0, 1.0, 0.0 )    '' Up-vector
    DrawGrid( 0.5, 12 )
    DrawScene( )

    '' Disable line anti-aliasing
    glDisable( GL_LINE_SMOOTH )
    glDisable( GL_BLEND )


    '' ** PERSPECTIVE VIEW **

    '' For perspective view, use solid rendering
    glPolygonMode( GL_FRONT_AND_BACK, GL_FILL )

    '' Enable face culling (faster rendering)
    glEnable( GL_CULL_FACE )
    glCullFace( GL_BACK )
    glFrontFace( GL_CW )

    '' Setup perspective projection matrix
    glMatrixMode( GL_PROJECTION )
    glLoadIdentity( )
    gluPerspective( 65.0, aspect, 1.0, 50.0 )

    '' Upper right view (PERSPECTIVE VIEW)
    glViewport( width_\2, height\2, width_\2, height\2 )
    glScissor( width_\2, height\2, width_\2, height\2 )
    glMatrixMode( GL_MODELVIEW )
    glLoadIdentity()
    gluLookAt( 3.0, 1.5, 3.0, _    '' Eye-position
              0.0, 0.0, 0.0, _    '' View-point
              0.0, 1.0, 0.0 )    '' Up-vector

    '' Configure and enable light source 1
    glLightfv( GL_LIGHT1, GL_POSITION, @light_position(0) )
    glLightfv( GL_LIGHT1, GL_AMBIENT, @light_ambient(0) )
    glLightfv( GL_LIGHT1, GL_DIFFUSE, @light_diffuse(0) )
    glLightfv( GL_LIGHT1, GL_SPECULAR, @light_specular(0) )
    glEnable( GL_LIGHT1 )
    glEnable( GL_LIGHTING )

    '' Draw scene
    DrawScene( )

    '' Disable lighting
    glDisable( GL_LIGHTING )

    '' Disable face culling
    glDisable( GL_CULL_FACE )

    '' Disable depth test
    glDisable( GL_DEPTH_TEST )

    '' Disable scissor test
    glDisable( GL_SCISSOR_TEST )


    '' Draw a border around the active view
    if( active_view > 0 and active_view <> 2 ) then
        glViewport( 0, 0, width_, height )
        glMatrixMode( GL_PROJECTION )
        glLoadIdentity()
        glOrtho( 0.0, 2.0, 0.0, 2.0, 0.0, 1.0 )
        glMatrixMode( GL_MODELVIEW )
        glLoadIdentity()
        glColor3f( 1.0, 1.0, 0.6 )
        glTranslatef( (active_view-1) and 1, 1-(active_view-1)\2, 0.0 )
        glBegin( GL_LINE_STRIP )
          glVertex2i( 0, 0 )
          glVertex2i( 1, 0 )
          glVertex2i( 1, 1 )
          glVertex2i( 0, 1 )
          glVertex2i( 0, 0 )
        glEnd()
    end if
end sub


''========================================================================
'' WindowSizeFun() - Window size callback function
''========================================================================

sub WindowSizeFun GLFWCALL( byval w as integer, byval h as integer )
    width_  = w
    height = iif( h > 0, h, 1 )
   
    doredraw = TRUE
end sub

''========================================================================
'' MousePosFun() - Mouse position callback function
''========================================================================

sub MousePosFun GLFWCALL ( byval x as integer, byval y as integer )
    '' Depending on which view was selected, rotate around different axes
    select case active_view
        case 1
            rot_x += y - ypos
            rot_z += x - xpos
        case 3
            rot_x += y - ypos
            rot_y += x - xpos
        case 4
            rot_y += x - xpos
            rot_z += y - ypos
        case else
            '' Do nothing for perspective view, or if no view is selected
    end select

    '' Remember mouse position
    xpos = x
    ypos = y
   
    if( active_view <> 0 ) then
       doredraw = TRUE
    end if
end sub


''========================================================================
'' MouseButtonFun() - Mouse button callback function
''========================================================================

sub MouseButtonFun GLFWCALL ( byval button as integer, byval action as integer )
   
    '' Button clicked?
    select case button
    case GLFW_MOUSE_BUTTON_LEFT
       
       if( action = GLFW_PRESS ) then
           '' Detect which of the four views was clicked
           active_view = 1
           if( xpos >= width_\2 ) then
               active_view += 1
         end if           
           if( ypos >= height\2 ) then
               active_view += 2
           end if
           
       '' Button released?
       else
           '' Deselect any previously selected view
           active_view = 0
        end if
       
        doredraw = TRUE
   
    end select
   
end sub


''========================================================================
'' main()
''========================================================================

    dim as integer running

    '' Initialise GLFW
    glfwInit( )

    '' Open OpenGL window
    if( glfwOpenWindow( 500, 500, 0,0,0,0, 16,0, GLFW_WINDOW ) = 0 ) then
        glfwTerminate()
       end 0
    end if

    '' Set window title
    glfwSetWindowTitle( "Split view demo" )

    '' Enable sticky keys
    glfwEnable( GLFW_STICKY_KEYS )

    '' Enable mouse cursor (only needed for fullscreen mode)
    glfwEnable( GLFW_MOUSE_CURSOR )

    '' Set callback functions
    glfwSetWindowSizeCallback( @WindowSizeFun )
    glfwSetMousePosCallback( @MousePosFun )
    glfwSetMouseButtonCallback( @MouseButtonFun )

    '' Main loop
    doredraw = TRUE

    do
        if( doredraw ) then
           doredraw = FALSE
           
           '' Draw all views
           DrawAllViews( )
           
        else
       
           '' Idle process
           glfwSleep( 0.025 )
           
        end if

        '' Swap buffers
        glfwSwapBuffers( )
           
        '' Check if the ESC key was pressed or the window was closed
        running = (glfwGetKey( GLFW_KEY_ESC ) = 0) and _
                  (glfwGetWindowParam( GLFW_OPENED ) = 1)
    loop while( running )

    '' Close OpenGL window and terminate GLFW
    glfwTerminate( )

   end 0

Roda mas com uma instabilidade estranha, as "rosquinha" ficam tremendo e às vezes a janelinha piscando.

Tem um outro exemplo do FreeBasic chamado "glext_text.bas" que é a mesma, funfa, mas tremendo, dessa vez só não fica piscando. Tem uns outros exemplos que não funcionam pois tão sem as DLLs, esses eu perdôo Wink

Com allegro + FB só tá dando incompatibilida com o modo gráfico padrão do windows mas o windows vai pro modo correto sózinho, é só não apertar no X dá janela do allegro que não trava (usar ESC).

Ei fabio, mostra depois teu pong prá nós, tá? só por ser em FB eu já creio que é o melhor. Wink

Aproveitando a oportunida, como o Freebasic se sai em testes de desempenho, ele é rápido, ou até o game maker dá surra nele?
E ae amigão blz??
Vamos como o Jack, por partes Very Happy
1-Botão Close
Para ter controle sobre esse botão você deve criar uma função callback pois caso contrario o Windows vai enviar a mensagem WM_QUIT que não será interceptada pela Allegro automaticamente.
Aqui eu modifiquei o exemplo do DEV_C para aceitar o pressionamento do botão close veja:
Código:

#include "allegro.h"

void init();
void deinit();
void close_button_handler(void);

volatile int close_button_pressed = FALSE;

int main() {
   init();

   while (!key[KEY_ESC] && close_button_pressed == FALSE)
   {
       textout_ex(screen, font, ALLEGRO_VERSION_STR, 10, 10, makecol(0, 0, 255), -1);
   }

   deinit();
   return 0;
}
END_OF_MAIN()

void init() {
   int depth, res;
   allegro_init();
   depth = desktop_color_depth();
   if (depth == 0) depth = 32;
   set_color_depth(depth);
   res = set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0);
   if (res != 0) {
      allegro_message(allegro_error);
      exit(-1);
   }

   install_timer();
   install_keyboard();
   install_mouse();
   set_window_close_hook(close_button_handler);
}

void deinit() {
   clear_keybuf();
}
void close_button_handler(void)
{
  close_button_pressed = TRUE;
}
END_OF_FUNCTION(close_button_handler)
Isso funciona da mesma maneira para o FreeBasic.

2-Desempenho do FreeBasic
O Free Basic não pode ser comparado ao GM pois o GM é interpretado e o FB é compilado isso faz com que o FB seja MUITO mais rápido. Pra testar isso crie um sistema de objetos como o GM e faça um teste com muitos objetos. Já comparando com C o C é mais rapido pois tem menos sobrecarga já que o C é muito simples e não tem construtores/destrutores/strings etc.

Quanto ao OPEN GL não vou dar opnião pois nunca testei o mesmo.



_________________
we love to make games!
avatar
vinians
Editor

Masculino
Mensagens : 85
Data de inscrição : 24/08/2009
Localização : Rio de Janeiro

http://www.xcreator.com.br

Voltar ao Topo Ir em baixo

Re: FreeBasic - Problemas no Windows 7

Mensagem por tblima123 em Qui 02 Dez 2010, 15:11

Ei pessoas, tudo bem?

Fabio, o seu brick braker ficou bem legal, então já que você não patentiou eu vou botar meu nome, compilar e vender, tá certo? Very Happy

Bem, antes gostaria de corrigir algumas coisas:
Meu opengl é o 3.3, só existe até o 4.1, aquele numero que eu disse é outra coisa que tem haver com o opengl mas não sei oque é.

Meu PC tava com o opengl 3.1 BETA, mas eu atualizei o Catalyst pra o 10.11 e agora o opengl é o ultimo compativel com minha placa, como uma empresa como a AMD libera um driver com opengl beta, em?

Eu mechi um bocado nas configurações do Catalyst (o painel do driver gráfico das placas AMD/ATI), e consegui estabilizar o opengl, funciona perfeitamente, não treme, não saltita, não dá voltinhas e nem fala mais "mamãe". Wink

Porem o código que usa FBGFX que eu postei anteriormente ainda dá problema (o windows diz que ele deixou de responder):
Código:

Screenres 600, 400, 32, 2
Screenset(0, 1)
#Include "fbgfx.bi"

Dim farinha_de_trigo(1 To 2) As fb.image Ptr
farinha_de_trigo(1) = imagecreate(200, 200)           
BLoad("char.bmp", 0)
Get (0, 0) - (200, 200), farinha_de_trigo(1)
Cls()
Put (0, 0), farinha_de_trigo(1), trans
Screencopy()

imagedestroy(farinha_de_trigo(1))
Sleep

Eu tentei usar Dona Benta com e sem fermento, e até aquelas massas pre-prontas (eu sou apaixonado pela de maracujá) mas nada!!! Very Happy

Sem brincadeira agora; virando um cara super sério e durão Embarassed

Em meus testes eu descobri que só dá problema se eu utilizar o GET tentando extrair o sprite da pagina de trabalho, porem se eu tentar extrair o sprite apartir de uma imagem (imagecreate()) não dá erro, creio que o get deve estar tendo problemas para acessar a pagina de trabalho, o que será?

Falando em velocidade, será que o freebasic compete ao menos com C++?
avatar
tblima123
Ocasional

Mensagens : 54
Data de inscrição : 06/11/2009

Voltar ao Topo Ir em baixo

Re: FreeBasic - Problemas no Windows 7

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum