Deutsch
Wünsche und Anregungen

Wunsch: &OGLBMP rausnehmen und einen guten Ersatz einbau

 
Der Befehl &OGLBMP für einen OGL-Bild ärgert einen ganz schön.
In Profan2Cpp ist er nicht durchführbar.
Und auf einigen Systemen mit Vista ärgert er auch.

Ich habe in meinem Programm eine gute Variante:
proc oglzubmp
ogl(glReadPixels,0,0,128,128,~GL_BGRA,~GL_UNSIGNED_BYTE,ogl_rgb#)
~setDIBits(%hdc,bild_auto_h&,0,128,ogl_rgb#,bmi#,0)
endproc

Womit man die Lage und die grösse aus einem Opengl-Fenster fischen kann.
Dazu braucht man aber Daten aus dem Bitmapheader.

Vielleicht könntest du Roland den irgendwie einbauen.

mfg
KompilierenMarkierenSeparieren
 $H Windows.ph
DEF rgb_umwandlung(2) ! bmptex.dll,bmptex
declare x1!,y1!,dx!,dy!,winkel!,y&,z%,groesse%
declare hWin&
declare width%,height%,texid%,ende%
declare bild_auto_h&,bild_umw_h&
declare bmi#,bildxy# ,ogl_rgb#
groesse%=128*128*4
dim bildxy#,groesse%
dim ogl_rgb#,groesse%
ende%=1
Window 20,20-400,200
Cls @RGB(220,220,220)
hWin& = @Create(text, %hWnd, Test1, 10, 10, 128,128)
oGL(Init, hwin&, 0,0, 0, 0)
oGL(PosMode, 1)
bild_auto_h& = Create(hnewPic,128,128,0 )
var tex.auto%=erzeugetex(auto.bmp)
drawglscene
drawglscene
oglzubmp

WHILE ende%

    sleep 1

    if isKey(81)

        winkel!=winkel!+1.0
        drawglscene
        oglzubmp()

    endif

    if isKey(69)

        winkel!=winkel!-1.0
        drawglscene
        oglzubmp()

    endif

    startpaint %hWnd
    drawpic bild_auto_h&,200,10,-1
    endpaint

ENDWHILE

end

proc oglzubmp

    ogl(glReadPixels,0,0,128,128,~GL_BGRA,~GL_UNSIGNED_BYTE,ogl_rgb#)
    ~setDIBits(%hdc,bild_auto_h&,0,128,ogl_rgb#,bmi#,0)

endproc

proc drawglscene

    OGL(Clear)
    OGL(origin,0,0,-1.11)
    OGL(texture,tex.auto%,1)
    OGL(rotate,0,0,winkel!)
    OGL(quad,0.5,0.5)
    OGL(show)

endproc

proc bitmap_header

    def &BI_RGB 0
    def &DIB_RGB_COLORS 0
    struct BITMAPINFOHEADER =
    biSize&, biWidth&, biHeight&, biPlanes%, biBitCount%, biCompression&,
    biSizeImage&, biXPelsPerMeter&, biYPelsPerMeter&, biClrUsed&, biClrImportant&
    dim bmi#,BITMAPINFOHEADER
    clear bmi#

    with bmi#

        .biSize&        = sizeof(bmi#)
        .biWidth&       = width%
        .biHeight&      = height%
        .biPlanes%      = 1
        .biBitCount%    = 32
        .biCompression& = &BI_RGB
        .biSizeImage&   = ((.biWidth& * .biBitCount%  8 - 1) | 3 + 1) * abs(.biHeight&)

    endwith

endproc

proc erzeugetex

    parameters namebild$
    texid%=0
    height%=128
    width%=128
    dispose bmi#
    bitmap_header()
    bild_umw_h& = Create(hPic, -1, namebild$)
    ~GetDIBits(%hdc,bild_umw_h&,0,bmi#.biHeight&,bildxy#,bmi#,0)
    rgb_umwandlung(bildxy#,groesse%)
    OGL(glGenTextures,1,ADDR(texid%))
    OGL(glBindTexture,~GL_TEXTURE_2D,texid%)
    OGL(glEnable,~GL_ALPHA_TEST)
    OGL(glAlphaFunc,~GL_GREATER, 0.1)
    OGL(glTexParameteri,~GL_TEXTURE_2D, ~GL_TEXTURE_MAG_FILTER, ~GL_LINEAR)
    OGL(glTexParameteri,~GL_TEXTURE_2D, ~GL_TEXTURE_MIN_FILTER, ~GL_LINEAR)
    OGL(gluBuild2DMipmaps,~GL_TEXTURE_2D, ~GL_RGBA, height%, width%, ~GL_RGBA, ~GL_UNSIGNED_BYTE, bildxy#)
    dispose bildxy#
    RETURN texid%

endproc


2 kB
Hochgeladen:28.02.2009
Ladeanzahl107
Herunterladen
49 kB
Hochgeladen:28.02.2009
Ladeanzahl122
Herunterladen
 
28.02.2009  
 




Jac
de
Lad
Ich würde eher sagen, dass es Sebastians Sache ist, was er damit macht. In Profan funktionierts, wenn es mit dem Workaround in Prf2CPP geht, dann kann Sebastian es ja so umsetzen. Den Befehl gleich komplett umzustricken halte ich persönlich für nicht sinnvoll.
 
Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE)
Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP
01.03.2009  
 




Jac
de
Lad
Ok, ich hab den anderen Thread dazu erst jetzt gelesen (&OGLBMP und Vista). Ich ziehe meinen vorigen Beitrag zurück.
 
Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE)
Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP
01.03.2009  
 



Ich würde eher sagen, dass es Sebastians Sache ist, was er damit macht. In Profan funktionierts, wenn es mit dem Workaround in Prf2CPP geht, dann kann Sebastian es ja so umsetzen.

Junge...junge....

Erst denken, dann schreiben.
Habe ich dir glaube schon im anderem Forum gesagt. Deine Flinte hat einem zu leichten Abzug.
 
01.03.2009  
 




Jac
de
Lad
Das hat nichts mit Denken zu tun, sondern damit, dass die Sprechblase den Thread in dem geschrieben stand, dass es bei Vista grundsätzlich nicht funktioniert, erst nach diesem geöffnet wurde und sich das so natürlich anders darstellt.
 
Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE)
Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP
02.03.2009  
 




RGH
Jac
Ok, ich hab den anderen Thread dazu erst jetzt gelesen (&OGLBMP und Vista). Ich ziehe meinen vorigen Beitrag zurück.


Wo ist der Thread &OGLBMP und Vista? Ich finde ihn nicht. Gibt es irgendwo ein kleines Beispielprogramm in reinem XPRofan, dass unter Vista nicht korrekt läuft?

Ich weiß, dass es unter XProfan 10 einige Grafiktreiber (bzw. OpenGL-Treiber) gab, bei denen Create(hPic,...) mit dem Bildnamen &OGLBMP nicht korrekt funktionierte. Betroffen waren einige Rechner mit OnBoard-Grafiklösungen. Daraufhin habe ich XProfan angepasst, um das Problem zu umgehen. Sollte das Problem unter Vista erneut auftauchen, müsste ich schauen, ob ich da was tun kann.

Gruß
Roland

BTW: &OGLBMP ist kein Befehl (nicht einmal eine Systemvariable), sondern eine Konstante für die Funktionen Create(hPic,...) und Create(hSizedPic,...)
 
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
02.03.2009  
 




Jac
de
Lad
@Roland: Ich bezog mich hierauf  [...]  . Bin mir aber nicht sicher, wie und ob das jetzt genau funktioniert.
 
Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE)
Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP
02.03.2009  
 



Betroffen waren einige Rechner mit OnBoard-Grafiklösungen. Daraufhin habe ich XProfan angepasst, um das Problem zu umgehen.

Ich habe Grafik OnBoard. AMILO FUJITSU.

Tritt auch bei XP auf.

Also von mir aus braucht es nicht geändert werden, ich habe meine Lösung gefunden, die ich jetzt bei mir in jedem Programm als Ersatz einbaut habe für &OGLBMP.

Zumal ich jetzt auch den Bildschirmausschnitt vom Openglscreen festlegen kann , welchen ich als BMP haben möchte.

Windooof ist manchmal hartnäckig

mfg
 
02.03.2009  
 



&OGLBMP

Auch mit Deleteobject müllt der Speicher voll, wenn ich dauernd ein OGL-Screen 128x128 Pixel einlade beim steuern meines Objektes.

mfg
 
07.03.2009  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

4.929 Betrachtungen

Unbenanntvor 0 min.
funkheld16.01.2022
Georg Teles03.02.2018
RICOSCH28.11.2013
Donnie07.04.2013

Themeninformationen

Dieses Thema hat 3 Teilnehmer:

unbekannt (4x)
Jac de Lad (4x)
RGH (1x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie