2013-09-30 3 views
7

Weil ich kein Experte bin, bitte betrachten Sie diese Frage nicht albern. Ich habe mehrere Tutorials gelesen, in denen Texturparameter mit glTexParameter gesetzt wurden. Ich spreche von GL_TEXTURE_MIN_FILTER, GL_TEXTURE_MAG_FILTER, GL_TEXTURE_WRAP_R etc .. Plötzlich stoße ich auf ein Tutorial, das jetzt glSamplerParameter verwendet, um diese Parameter einzustellen.Was ist der Unterschied zwischen glTexParameter und glSamplerParameter

Ich sehe es gibt einige gemeinsame Parameter zwischen glTexParameter und glSamplerParameter wie (GL_TEXTURE_MIN_FILTER, GL_TEXTURE_MAG_FILTER, GL_TEXTURE_WRAP_R, GL_TEXTURE_MIN_LOD usw.), und es gibt einige, die nur in glTexParameter (GL_TEXTURE_BASE_LEVEL, GL_TEXTURE_SWIZZLE_R usw.). Ich verstehe die unüblichen sehr gut, weil glTexParameter schließlich auf das Bild einwirkt, und diese Parameter spezifizieren das Attributbild an sich.

Aber ich verstehe nicht ganz, warum gibt es einige Parameter, die zwischen diesen 2 GL Anrufe sind. Welches sollte wann verwendet werden? Meiner Meinung nach sollten Sampling-Parameter wie (GL_TEXTURE_MIN_FILTER, GL_TEXTURE_MAG_FILTER, GL_TEXTURE_WRAP_R, usw.) nur für den Sampler (glSamplerParameter) und nicht für glTexParameter gelten.

Bitte helfen Sie mir, den Unterschied zwischen zwei zu verstehen.

Antwort

10

glSamplerParameter ist relativ neu. Die Art und Weise, wie eine Textur abgetastet wird, ist eigentlich eine Eigenschaft des Sampling-Subjekts, nicht der Textur selbst - nicht nur in semantischer Hinsicht, sondern auf tatsächlicher, realer Hardware.

Neben dem Wunsch, die Dinge so darzustellen, wie sie tatsächlich auf der Hardware funktionieren, kann die Verbindung zweier nicht zusammengehöriger Dinge zu Leistungseinbußen führen. Wenn Sie die Art und Weise, wie eine Probe des Samplers abgetastet wird, dann z. Sie können die gleiche Textur auf zwei verschiedene Arten innerhalb desselben Shaders ausprobieren. Wenn es eine Eigenschaft der Textur ist, müssen Sie die gleiche Textur zweimal hochladen oder einen Multi-Pass-Shader schreiben.

Daher werden die beiden Dinge jetzt getrennt.

+0

es klingt wie mit glSamplerParameter in vielerlei Hinsicht besser ist. Können Sie auf die Fälle hinweisen, in denen die Verwendung von glTexParameter Vorteile hat? – viktorzeid

+3

@kvikram: Es gibt wirklich keine = P Sampler-Objekte sind so, wie es die ganze Zeit hätte funktionieren sollen und wie es schon seit Jahren in D3D funktioniert. Wenn Sie den Sampler-Status getrennt vom Textur-Objekt haben, können Sie den Filter-Modus einfach ändern, indem Sie einen anderen Sampler an eine TMU binden. Sie sind ein OpenGL 3.3-Feature, aber ziemlich weit verbreitet. –

+0

Danke an euch beide. – viktorzeid

2

hier Suchen Sie nach einem reference about Sampler Objects Und here from geeks3d

Es wurde in Version 3.3 Core OpenGL hinzugefügt (so sollte ganz gut heute angepasst werden).

Im Allgemeinen trennt es Stichproben von Texturen aus den Texturdaten. Zuvor war es beides Aufgabe von Texture Object (was ziemlich ineffizient und problematisch war). Jetzt bietet die neue Lösung viel Flexibilität.

Parameter sind die gleichen wie für die Textur Objekte, sondern nur der Probenahme betrifft: GL_TEXTURE_WRAP_S​, GL_TEXTURE_WRAP_T​, GL_TEXTURE_WRAP_R​, GL_TEXTURE_MIN_FILTER​, GL_TEXTURE_MAG_FILTER​, GL_TEXTURE_BORDER_COLOR​, GL_TEXTURE_MIN_LOD​, GL_TEXTURE_MAX_LOD​, GL_TEXTURE_LOD_BIAS​, GL_TEXTURE_COMPARE_MODE​, or GL_TEXTURE_COMPARE_FUNC​

Verwandte Themen