Я работаю над созданием общих типов данных вместо того, чтобы использовать OpenGL-тип GLfloat
. Поэтому я начал делать это с типом a
, а затем просто заменил все на это.Haskell - Не удалось вывести ... из контекстной ошибки - OpenGL Тип класса AsUniform
Теперь я подошел к точке, где устанавливаю единые переменные, но они берут в GLfloat. Я использую библиотеку под названием GLUtil, которая делает ее немного проще, которая предоставила класс AsUniform
, чтобы проверить, может ли тип быть однородной переменной или нет. Я придерживаюсь его в своей сигнатуре типа, но он все еще дает мне ошибку. Вот код:
-- | Sets the modelview and projection matrix uniform variables.
mvpUnif :: (GL.UniformComponent a, Num a, Epsilon a, Floating a, AsUniform a) => (GLState a) -> ShaderProgram -> IO()
mvpUnif state p = do
-- Check if view and projection matrices are there, else set them to the identity.
let vMat = case vMatrix state of
Just v -> v
Nothing -> getIdentity
let pMat = case pMatrix state of
Just p -> p
Nothing -> getIdentity
-- Multiply model and view matrix together.
let mvMatrix = vMat !*! mMatrix state
setUniform p uModelViewMatrixVar mvMatrix
setUniform p uProjectionMatrixVar pMat
и ошибка:
Could not deduce (AsUniform (V4 (V4 a)))
arising from a use of `setUniform'
from the context (GL.UniformComponent a,
Num a,
Epsilon a,
Floating a,
AsUniform a)
bound by the type signature for
mvpUnif :: (GL.UniformComponent a, Num a, Epsilon a, Floating a
,
AsUniform a) =>
GLState a -> ShaderProgram -> IO()
at src\Graphics\FreeD\Shaders\DefaultShaders.hs:194:12-119
In a stmt of a 'do' block:
setUniform p uModelViewMatrixVar mvMatrix
In the expression:
do { let vMat = ...;
let pMat = ...;
let mvMatrix = vMat !*! mMatrix state;
setUniform p uModelViewMatrixVar mvMatrix;
.... }
In an equation for `mvpUnif':
mvpUnif state p
= do { let vMat = ...;
let pMat = ...;
let mvMatrix = ...;
.... }
В4 изготовлен экземпляр AsUniform, а также М44, который является типом для (В4 (В4 а)), который я мысль может быть проблемой, поэтому я не уверен, почему она действует.
Вот источник для класса:
http://hackage.haskell.org/package/GLUtil-0.8.5/docs/Graphics-GLUtil-Linear.html
Спасибо!
Nope: /. Такая же ошибка. Поместите его вверху и в файл моего кэша, и я попытался изменить сиг на 'AsUniform (V4 (V4 a))', но это не повлияло на него. Возможно, на странице пакета GLUtil может быть немного света, почему это не сработает, вы думаете? – Gentatsu