小编Vil*_*nde的帖子

将值列表传递给片段着色器

我想将一个值列表发送到片段着色器.它是一个可能很大(几千个项目长)的单精度浮标列表.片段着色器需要随机访问此列表,我想在每个帧上刷新CPU的值.

我正在考虑如何做到这一点:

  1. 作为数组类型的统一变量("uniform float x [10];").但是这里似乎有限制,在我的GPU上发送超过几百个值非常慢,而且当我宁愿在运行时更改它时,我还必须对着色器中的上限进行硬编码.

  2. 作为高度为1且列表宽度的纹理,然后使用glCopyTexSubImage2D刷新数据.

  3. 其他方法?我最近没有跟上GL规范中的所有变化,也许还有一些专门为此目的设计的方法?

opengl glsl

70
推荐指数
3
解决办法
4万
查看次数

Delphi 64位:发现错误的演员表?

我正在努力将大型Delphi代码库调整为64位.在许多情况下,有些行指针是从32位值转换为32位值,类似于:

var
  p1,p2 : pointer;
begin
  inc(Integer(p1),10);
  p2 := Pointer(Integer(p1) + 42);
Run Code Online (Sandbox Code Playgroud)

在我可以找到这些演员表的地方,我已经用NativeInt-cast替换它们,而不是在64位模式下使它们正确.

但是我不确定我是否找到了所有这些.有时候演员表更精细,所以只需要对字符串"整数"进行文本搜索,这也是不够的.

由于"整数("转换将在64位失败,如果指针值高于整数类型的范围我有一个想法:如果我可以强制内存管理器分配4gb以上的内存(所以指针值使用更多)比32位)?然后我会得到运行时错误,并且可以更容易地找到错误的演员.这可能吗?或者任何人都可以推荐其他技术?

delphi 64-bit memory-management delphi-xe2

15
推荐指数
1
解决办法
653
查看次数

项目中的程序集资源FileNotFoundException已升级到VS 2010 framework 4.0

我已经将C#WinForms应用程序从Visual C#2008(框架3.5)升级到2010(框架4.0),我遇到了运行时错误.

应用程序使用Assembly.Load(filename)在运行时动态加载程序集.它是这样设计的,因为根据用户配置,它应该加载位于不同文件夹中的程序集的不同实现.

一切正常,除非加载的dll有嵌入资源(位图或xsd数据集),然后我得到FileNotFoundException:

{"无法找到文件'FF.Fi_Stat.SKA.resources'.":null}

该程序集称为FF.Fi_Stat.SKA.dll.我不理解这条消息,因为没有外部资源(只有嵌入式资源),并且VS在输出目录中没有生成具有该名称的文件.有任何想法吗?

-

更多细节:

这是我加载程序集的方式:

Assembly a = Assembly.LoadFile(assemblyFileName);
Run Code Online (Sandbox Code Playgroud)

组件的实际加载工作,当我尝试在程序集内创建异常发生的类的实例时:

Type t = a.GetType("nameofclass");
Activator.CreateInstance(t);  //fails here
Run Code Online (Sandbox Code Playgroud)

这是堆栈跟踪:

Exception has been thrown by the target of an invocation.
   at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
   at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache)
   at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache)
   at System.Activator.CreateInstance(Type type, Boolean nonPublic)
   at System.Activator.CreateInstance(Type type)
   ...
Run Code Online (Sandbox Code Playgroud)

内部异常堆栈跟踪:

   at System.Reflection.RuntimeAssembly.InternalGetSatelliteAssembly(String name, CultureInfo culture, Version version, Boolean throwOnFileNotFound, …
Run Code Online (Sandbox Code Playgroud)

c# visual-studio-2010

9
推荐指数
1
解决办法
5878
查看次数

Delphi XE2:从文件重新加载自定义VCL样式?

我正在使用以下文件从文件加载自定义样式:

TStyleManager.LoadFromFile(filename)
Run Code Online (Sandbox Code Playgroud)

当文件被更改时,我想再次加载它.但是,如果我尝试我得到一个EDuplicateStyleException因为风格已经注册.

有没有办法卸载样式,所以我可以再次加载它?典型的情况是您正在更改自定义样式,并希望在不重新启动整个应用程序的情况下查看它.

delphi delphi-xe2 vcl-styles

8
推荐指数
1
解决办法
2427
查看次数

嵌入在DLL中的VCL-Styles?

如何在dll中嵌入Delphi XE2 VCL-Styles?在DLL项目的项目设置中看不到"应用程序 - 外观"页面.

我尝试在一个包含在$ R指令中的rc文件中定义它们,但是如果有更好的方法我想知道它.

RC文件示例:

GOLDENGRAPHITE VCLSTYLE "C:\Program Files (x86)\Embarcadero\RAD Studio\9.0\Redist\styles\vcl\GoldenGraphite.vsf"
CARBON VCLSTYLE "C:\Program Files (x86)\Embarcadero\RAD Studio\9.0\Redist\styles\vcl\Carbon.vsf"
Run Code Online (Sandbox Code Playgroud)

特别是必须指定XE2安装文件夹的完整路径是我想要避免的.

delphi delphi-xe2 vcl-styles

6
推荐指数
1
解决办法
3154
查看次数

调用glGetTexImage时出错(atioglxx.dll)

我在某些ATI卡(Radeon X1650,X1550 +等)上遇到了一个棘手的问题.

消息是:"模块'atioglxx.dll'中地址6959DD46处的访问冲突'.读取地址00000000"

它出现在这一行:

glGetTexImage(GL_TEXTURE_2D,0,GL_RGBA,GL_FLOAT,P);
Run Code Online (Sandbox Code Playgroud)

注意:

  • 安装了最新的图形驱动程序
  • 它适用于其他卡.

这是我到目前为止尝试过的(在代码中使用断言):

  • 指针P有效并分配足够的内存来保存图像
  • 纹理已启用:glIsEnabled(GL_TEXTURE_2D)
  • 测试当前绑定的纹理是我期望的纹理:glGetIntegerv(GL_TEXTURE_2D_BINDING)
  • 测试当前绑定的纹理是否具有我期望的尺寸:glGetTexLevelParameteriv(GL_TEXTURE_WIDTH/HEIGHT)
  • 测试没有报告错误:glGetError

它通过所有那些测试,然后仍然失败的消息.

我觉得我已经尝试了一切,没有更多的想法.我真的希望这里的GL-guru可以提供帮助!

编辑:

结束后它可能是我在这里发布的驱动程序错误:http://www.opengl.org/discussion_boards/ubbthreads.php? subb = showflat&Number = 295137# Post295137

我也尝试了GL_PACK_ALIGNMENT,它没有帮助.

通过一些更多的调查,我发现它只发生在我之前使用glCopyTexSubImage2D调用像素填充的纹理上.所以我可以通过调用glReadPixels然后调用glTexImage2D来替换glCopyTexSubImage2d调用来产生一种解决方法.

这是我更新的代码:

{
  glCopyTexSubImage2D cannot be used here because the combination of calling
  glCopyTexSubImage2D and then later glGetTexImage on the same texture causes
  a crash in atioglxx.dll on ATI Radeon X1650 and X1550.
  Instead we copy to the main memory first and then update.
}
//    glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, …
Run Code Online (Sandbox Code Playgroud)

opengl

5
推荐指数
1
解决办法
2064
查看次数

VCL-Styles菜单热键不一致

我注意到,当启用VCL-Styles时,即使没有按下Alt键,也会使用热键选择菜单中的项目.

这会干扰我的其他用户界面,我发现样式库改变了热键的行为很奇怪.

我可以以某种方式消除这种不一致吗?

正常:按"A"不会激活主菜单(Alt + A会激活).

正常:按

样式:按"A"激活主菜单.注意:没有Alt键.

样式:按

我的测试项目在这里,以防任何人想要尝试它.

delphi delphi-xe2 vcl-styles

5
推荐指数
1
解决办法
587
查看次数

在direct3d和opengl之间共享纹理?

我知道不建议混合使用OpenGL和DirectX,但我正在尝试在使用单独图形API的两个不同应用程序之间建立桥梁:我希望有一种共享数据的技术,特别是纹理.

我有一个在Direct3D中创建的纹理,如下所示:

d3_device-> CreateTexture(width, height,
  1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT,
  &texture, NULL);
Run Code Online (Sandbox Code Playgroud)

有没有什么办法可以在不通过系统内存往返的情况下使用OpenGL的这种纹理?

opengl textures direct3d

3
推荐指数
1
解决办法
3511
查看次数

使用Delphi 2010构建的文件报告病毒/木马

我试图通过电子邮件发送一个用Delphi构建的DLL文件,但收到了拒绝电子邮件报告:

"您的电子邮件被拒绝,因为它包含Trojan.Delf-9364"

所以我将文件上传到http://scanner.novirusthanks.org,并且确定它在其中一个病毒扫描程序中报告了一个正面:

"F-PROT6 20100630 4.5.1.85 W32/Swizzor-based.2!Maximus"

然后我构建了一个空的exe文件(文件 - 新的 - VCL表单应用程序)并再次上传,这次我得到了另一个积极的:

"VBA32 01/07/2010 3.12.12.2 Trojan.Win32.Swisyn.acyl"

更多细节在这里:http://scanner.novirusthanks.org/analysis/e59033c40f1a6e37c210cb1c4f40f059/UHJvamVjdDEuZXhl/

所以我不确定如何解释这些结果.以上是误报,我的计算机是否感染了感染所有二进制文件的病毒,或者我的Delphi副本是否感染了特定于Delphi的病毒?我使用AVG防病毒软件,它在我的计算机上报告没有问题.也许Delphi 2010的其他人可以尝试上传project1.exe并查看它们是否收到不同的结果?

delphi antivirus delphi-2010

3
推荐指数
1
解决办法
1256
查看次数