Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Mär 28, 2024 17:47

Foren-Übersicht » Programmierung » Shader
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Point-Sprites in OpenGL 3.3
BeitragVerfasst: Di Dez 31, 2013 19:40 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 14, 2013 21:17
Beiträge: 587
Programmiersprache: C++
Heyho,
ich möchte runde Punkte zeichnen, wie es früher mit GL_POINT_SMOOTH ging. Das ist inzwischen deprecated und steht in OpenGL 3.3 nicht mehr zur Verfügung. Ich bin auf einen interessanten Artikel gestoßen, in dem beschrieben wird, wie man die unerwünschten Fragmente mittels gl_PointCoord findet und im Fragmentshader per discard eliminiert. Bei mir liefert gl_PointCoord leider immer 0, statt Werte zwischen 0 und 1. Also habe ich einen Blick in die Specs geworfen:
GLSLangSpec.3.30.6 hat geschrieben:
The values in gl_PointCoord are two-dimensional coordinates indicating where within a point primitive
the current fragment is located, when point sprites are enabled. They range from 0.0 to 1.0 across the
point. If the current primitive is not a point, or if point sprites are not enabled, then the values read from
gl_PointCoord are undefined.

Der einzige Grund für dieses Verhalten kann also offenbar nur sein, dass ich Point Sprites nicht aktiviert habe.
Code:
  1. glEnable(GL_POINT_SPRITE);
kann ich jedoch auch nicht schreiben, da dies ebenfalls deprecated (und GL_POINT_SPRITE von gl3w auch gar nicht deklariert wird) ist. Laut diesem Thread ist das manuelle Aktivieren von Point Sprites auch gar nicht nötig, da es in OpenGL 3.3 sowieso immer aktiviert ist. Wenn dies stimmt, frage ich mich jedoch, warum die Spec von GLSL 3.3 noch davon spricht.

Weiß jemand, was ich machen muss, damit gl_PointCoord die richtigen Werte liefert?

Vielen Dank schonmal für eure Antworten und einen guten Rutsch!

_________________
So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Point-Sprites in OpenGL 3.3
BeitragVerfasst: Di Dez 31, 2013 22:01 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 14, 2013 21:17
Beiträge: 587
Programmiersprache: C++
Argh, Intel-Treiber! Schon wieder. Mit Nvidia-Grafik funktioniert es.

_________________
So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Point-Sprites in OpenGL 3.3
BeitragVerfasst: Mi Jan 01, 2014 14:49 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
Nvidia verhält sich bei Point-Rendering ohnehin nicht standardkonform. Der Standard sieht nämlich vor, dass Points an ihrem Mittelpunkt geclippt werden: Ist der Mittelpunkt sichtbar wird gerendert sonst nicht. Nvidia clippt scheinbar jedoch nicht standardkonform sondern erwartungsgemäß: Es wird geclippt als wäre der Punkt ein Quad.

Bei Pointsprites weiß ich es ehrlich gesagt nicht genau. Ich habe bisher meine Partikelgeometrie immer im Geometryshader generiert. Kann aber auch sein, dass Pointsprites performanter wären, aber damit habe ich noch keine Erfahrungen gemacht.

Mit Intel OpenGL-Treibern hatte ich bisher sowieso nur Probleme. Du hast schon Glück, dass du OpenGL 3.3 verwenden darfst. Meiner kann nur unterirdisches OGL 1.4 !


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Point-Sprites in OpenGL 3.3
BeitragVerfasst: Do Jan 02, 2014 17:44 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 14, 2013 21:17
Beiträge: 587
Programmiersprache: C++
Ich hatte nun die Möglichkeit, auf weiteren Geräten zu testen. Auf einem anderen Laptop mit der gleichen Intel-Grafik (HD 4000) aber neueren Treibern funktioniert alles einwandfrei. Leider hat das Updaten von Treibern auf Notebooks immer etwas experimentelles.

Auf einer Desktop-Maschine mit AMD Radeon (5000er-Serie) und einem Treiber von 2011 wird gl_PointSize einfach mal komplett ignoriert (ist immer 1). Also irgendwie bekleckern sich alle Hersteller nicht mit Ruhm.

_________________
So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Point-Sprites in OpenGL 3.3
BeitragVerfasst: Do Jan 02, 2014 18:31 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
Dolphin Emulator and OpenGL drivers - Hall of Fame/Shame

Für mich der Grund, warum ich mir eine Nvidia-Karte kaufen werde und keine von AMD.
Obwohl einige Leute sagen, bei AMD gäbe es ein besseres Preis/Leistungs-Verhältnis.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Point-Sprites in OpenGL 3.3
BeitragVerfasst: Do Jan 02, 2014 20:09 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 14, 2013 21:17
Beiträge: 587
Programmiersprache: C++
Es ist zum aus der Haut fahren! :evil:

Gerade habe ich im Taskmanager beobachtet, dass mein Prozess pro Sekunde etwa 40 kB Hauptspeicher verschlingt und nicht wieder hergibt - allerdings nur in den ersten 25 Sekunden. Habe das ganze dann zurückverfolgt und bin zu dem Ergebnis gekommen, dass der Speicherverbrauch bei jedem Aufruf von glUniform3fv auftritt. Und zwar nur mit dem Nvidia-Treiber. *Kopf an die Wand klatsch*

Es gibt offenbar keine auch nur annähernd fehlerfreien Grafiktreiber.

_________________
So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Point-Sprites in OpenGL 3.3
BeitragVerfasst: Sa Jan 04, 2014 10:59 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
glAwesome hat geschrieben:
Es gibt offenbar keine auch nur annähernd fehlerfreien Grafiktreiber.


Nein, gibts auch nicht. Ich programmier ja schon sehr lange mit OpenGL (und jetzt auch mit ES) und hab jede Menge Hersteller durch, und was sich da einige "leisten" ist echt hart. Ich hab sogar mal OpenGL auf ner Matrox Karte gemacht (G400 afair), und da war der OpenGL-Treiber nur ein Wrapper auf Direct3D-Basis. PowerVR hab ich mal kurz was mit gemacht (Kyro), und das war ganz angenehm. ATI (AMD) waren anfänglich ganz schlimm, das Catalyst-Team hat damals aber sehr schnell auf gemeldete Fehler reagiert. Intel find ich auch fies, v.a. da die ja den größten Marktanteil haben.

Fehlerfreie OpenGL-Treiber die sich genau an den Standard halten wird man im Consumerbereich nicht finden, da müsste man schon in Richtung OpenGL SC gehen ;)

Aber unter OpenGL ES ists auch nicht besser, hab grad nach ewig langem rumprobieren im Netz rausgefunden dass auf einigen Geräten immer, also auch im Fehlerfall, ein leeres Shaderlog zurückgegeben wird. Also absolut unlustig wenn ein als Ressource gespeicherter Shader nicht kompiliert werden kann (der syntaktisch aber richtig ist), da steht man dann doof da.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Point-Sprites in OpenGL 3.3
BeitragVerfasst: So Jan 05, 2014 17:59 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1276
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Zitat:
Aber unter OpenGL ES ists auch nicht besser, hab grad nach ewig langem rumprobieren im Netz rausgefunden dass auf einigen Geräten immer, also auch im Fehlerfall, ein leeres Shaderlog zurückgegeben wird. Also absolut unlustig wenn ein als Ressource gespeicherter Shader nicht kompiliert werden kann (der syntaktisch aber richtig ist), da steht man dann doof da.


Ein ganzen Abend habe ich den Fehler gesucht, da ich auf Android (noch) keine Fehler ausgeben kann.
Der Bildschirm blieb einfach leer. Zuerst dachte ich an einem Pointerfehler oder Ähnlichem.

Code:
  1. // Funktionierte auf meinem PC mit Lazarus und mit BlueStacks
  2. // Auf meinem Tablet ging es nicht.
  3.  
  4. LightPosition = (LightPosition * -1) - Pos ;
  5.  
  6. // Funktioniert auf allem
  7.  
  8.   LightPosition = (LightPosition * -1.0) - Pos ;

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Point-Sprites in OpenGL 3.3
BeitragVerfasst: So Jan 05, 2014 18:11 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
Das ist ein allgemein Bekannter Fall. Im DGL Wiki steht auch, dass hier AMD im Gegensatz zu Nvidia streikt. Das kann auch sein, dass inzwischen anders ist.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Point-Sprites in OpenGL 3.3
BeitragVerfasst: So Jan 05, 2014 18:16 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1276
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Ich muss mich wohl daran gewöhnen, das ich immer x.0 schreibe, in Java stolpere ich auch noch öfters darüber.

Zitat:
Das kann auch sein, dass inzwischen anders ist.

Das nützt auch nicht viel, es gibt noch viele ältere Computer.

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Point-Sprites in OpenGL 3.3
BeitragVerfasst: So Jan 05, 2014 18:26 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
Eben. Wichtig ist nicht nur das es funktioniert, sondern dass es auch richtig ist.
Bei GLSL Shadern sowieso. Da geht ja des Öfteren noch nichtmal das, was laut Spezifikation eigentlich sowieso gehen sollte.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Point-Sprites in OpenGL 3.3
BeitragVerfasst: So Jan 05, 2014 19:30 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1276
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Das wird auch der Grund sein, das es PC-Spiele gibt, die Grafikfehler haben oder abstürzen.

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ] 
Foren-Übersicht » Programmierung » Shader


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 10 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.060s | 17 Queries | GZIP : On ]