将Matrix4f加载到FloatBuffer中,以便我的着色器可以使用它

时间:2018-12-29 15:45:21

标签: java lwjgl

我创建了Matrix4f,它是我的着色器的正交透视图。要存储用于着色器的上传矩阵,需要将其存储在FloatBuffer中。当我想将矩阵放入FloatBuffer时,我的数学库JOML出现错误。 (我使用LWJGL3) 错误如下:

using (var context = new DbContext())
{
    var se = new SubscriptionError()
    {
        FieldName1 = "Value",
        SubscriptionId = 1,//Parent key
        //SubscriptionErrorId is auto 
    };
    context.SubscriptionError1.Add(se);
    context.SaveChanges();
}

那是我的代码:

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.joml.MemUtil$MemUtilUnsafe 
(file:/C:/Dev/Java/Learn%20OpenGL/lib/joml-1.9.6.jar) to field 
java.nio.Buffer.address
WARNING: Please consider reporting this to the maintainers of 
org.joml.MemUtil$MemUtilUnsafe
WARNING: Use --illegal-access=warn to enable warnings of further illegal 
reflective access operations
WARNING: All illegal access operations will be denied in a future release

1 个答案:

答案 0 :(得分:1)

根据评论进行了更新:

该错误是由于使def say_hello(): print('Hello User') say_hello() 类的<form action="search.php?search=test" method="post" id="searchForm"> 字段可访问而引起的,以便使用<form action="/search/test" method="post" id="searchForm"> 类将其用于填充缓冲区。

此问题已通过this commit修复,因此,应在最新版本的JOML中解决。因此,如果可能,您应该更新到最新版本。


旧版本的两种解决方法:

  1. JOML有一个启动选项,它禁止使用address类。因此,您可以将java.nio.Buffer传递到您的应用程序。但是该标志在很大程度上没有记录,并且尚不完全清楚该标志会带来什么影响。

  2. 另一种解决方法是将数据从矩阵手动移至缓冲区:

    Unsafe

    但这不是很好,因为您正在手动执行 ,而JOML在不使用Unsafe时已经在内部进行了操作。