PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : profil für Cg


Bietchiebatchie
2006-02-01, 18:28:06
Hi.

Vielleicht kann mir ja jemand von euch helfen. Folgendes Problem:
Ich soll nen kleinen Vertex-Shader für die Uni schreiben. (d.h. eigentlich soll ich mehr oder weniger in eine gegebene Funktion nen bissl Code reinschreiben)
die hierbei verwenden Cg-Profile sind:

enum eCGProfile
{
cgpFragment = CG_PROFILE_FP30,
cgpVertex = CG_PROFILE_VP30
};

Laut Unileuten soll das ganze nur auf nv-chips >= fx5200 laufen.
Ich hab aber ne 9800er und da beschwert sich nachher das Programm, dass es das Profil nich kennt, durch Rausprobieren hab ich rausgefunden, dass es scheinbar an CG_PROFILE_VP30 liegt, im Web hab ich Alternativen wie
CG_PROFILE_VP20 und
CG_PROFILE_ARBVP1
gefunden, keines davon funktioniert aber.
Weiss jemand von euch Rat oder liege ich einfach komplett falsch?
Man muss dazu sagen, dass ich von der ganzen GPU-Programmierung relativ wenig Ahnung habe.

MfG
Bietchiebatchie

ScottManDeath
2006-02-01, 22:51:31
Kommt drauf an, wie komplex Dein Shader ist. Es könnte dann sein, das Deine Radeon 9800 nicht die Features hat, wie z.B. Anzahl der Instruktionen, .... sollte aber eher unwahrscheinlich sein, bei Shadern für die Uni ;)

Die folgenden Funktionen geben Dir die jeweilig besten Profile, die Deine GPU unterstützt.

cgGLGetLatestProfile(CG_GL_VERTEX)
cgGLGetLatestProfile(CG_GL_FRAGMENT)

Bietchiebatchie
2006-02-02, 01:56:01
cgGLGetLatestProfile(CG_GL_VERTEX)
cgGLGetLatestProfile(CG_GL_FRAGMENT)
Jup, das geht. Dumm nur, dass ich in mein Enum keine Funktionsaufrufe unterbringen kann ... naja hab die Ergebnisse der Funktionen einfach mal auf int gecastet, ausgeben lassen und die Integerwerte ins Enum geschrieben. Funktioniert interessanterweise =D

Kommt drauf an, wie komplex Dein Shader ist. Es könnte dann sein, das Deine Radeon 9800 nicht die Features hat, wie z.B. Anzahl der Instruktionen, .... sollte aber eher unwahrscheinlich sein, bei Shadern für die Uni ;)
Nee soll einfach nur sein, damit wir in der Vorlesung auch mal Cg benutzt haben. Wird nen einfacher Wassershader, sonst nix.

Vielen Dank!

ScottManDeath
2006-02-02, 06:02:53
Jup, das geht. Dumm nur, dass ich in mein Enum keine Funktionsaufrufe unterbringen kann ... naja hab die Ergebnisse der Funktionen einfach mal auf int gecastet, ausgeben lassen und die Integerwerte ins Enum geschrieben. Funktioniert interessanterweise =D


Das ist ähmmm etwas sinnlos ;) Denn Du willst ja zur Laufzeit das Profil auswählen, und nicht zur Compilezeit. Warum machst Du nicht einfach 2 CGprofile Variablen anstelle des enums :confused:

micki
2006-02-02, 10:29:23
cgGLGetLatestProfile(CG_GL_VERTEX)
cgGLGetLatestProfile(CG_GL_FRAGMENT)
ist das nicht seit cg1.4 raus? bzw liefert 0?

Bietchiebatchie
2006-02-02, 16:38:04
Das ist ähmmm etwas sinnlos ;) Denn Du willst ja zur Laufzeit das Profil auswählen, und nicht zur Compilezeit. Warum machst Du nicht einfach 2 CGprofile Variablen anstelle des enums :confused:
das mit dem enum hab ich nich gemacht, das war schon vorgegeben, außerdem sollte das ganze ja nur kurzzeitig auf meinem Rechner laufen; abgeben tue ich es einfach mit den Voreinstellungen




cgGLGetLatestProfile(CG_GL_VERTEX)
cgGLGetLatestProfile(CG_GL_FRAGMENT)
ist das nicht seit cg1.4 raus? bzw liefert 0?
Definitiv nicht: bei mir liefert es für Vertex 6150 und für Fragment 7000 ... und wie gesagt funktionieren tut es.

ScottManDeath
2006-02-03, 00:53:05
ist das nicht seit cg1.4 raus? bzw liefert 0?

Nope. Ist AFAIK Teil von der CG Steinzeitversion. Habs schon mit der 1.2 genutzt.