在 AnyCPU 或 x86 上,我可以运行这个程序,在 Foo 上设置一个断点,将第一个参数从 0.5f 编辑到 0.6f,然后恢复就好了。但是,在 x64 上,它在恢复时始终因 FatalExecutionEngineError 崩溃。
using System;
using System.Numerics;
public static class Interaction
{
public static void Main(string[] args)
{
while (true)
{
Console.WriteLine(Foo.M11);
System.Threading.Thread.Sleep(0);
}
}
private static Matrix4x4 Foo
{
get
{
return Matrix4x4.CreateFromYawPitchRoll(0.5f /* breakpoint and set this to 0.6f*/, 0.5f, 0.5f);
}
}
}
Run Code Online (Sandbox Code Playgroud)
至少,它发生在 .NET Framework 4.7.2 和 .NET Framework 4.6.2 上。有没有办法解决这个问题?
编辑:在 .NET Framework 4.8 上对其进行了测试,在阅读他们修复了该版本中的一些 x64 内容后,它仍然崩溃!
XCode的ARC重构迫使我的Cocoa Library DLL为64位,我不知道我是否仍然可以DllImport使用x86 C#应用程序中的DLL.这可能吗,这样做有什么后果吗?
在Objective-C类中,我有一个@private ivar,它使用以下形式的枚举:
typedef NS_ENUM(NSInteger, PlayerStateType) {
PlayerStateOff,
PlayerStatePlaying,
PlayerStatePaused
};
Run Code Online (Sandbox Code Playgroud)
但是,我将此定义包含在该类的头文件中(因为它已在其中使用).这有效地使类型公开,这不是我的意图.如何将此枚举类型设为私有?
相信C#编译器在普通数组(如.)上使用时会改写foreach成a 。但是,对于存储 a 的集合,会因迭代其内容而导致装箱吗?forint[]struct
例如,下面的代码是否依赖装箱 ( IEnumerable<KeyValuePair<int,byte>>) 来迭代dict?
void DoSomething(Dictionary<int,byte> dict) {
foreach(KeyValuePair<int,byte> itr in dict)
m_correlation += itr.Key; }
Run Code Online (Sandbox Code Playgroud) 我不确定哪种结构布局最适合我的应用程序:shared、packed、std140、std430。我并不是要对每一个进行解释,这些信息很容易找到,只是很难弄清楚每个对供应商兼容性/性能的影响。如果shared是默认值,我怀疑这是一个很好的起点。
据我所知,我必须在使用sharedor时查询对齐/偏移量packed,因为它是特定于实现的。
用于查询它的 API 是什么?glGetShaderiv在绑定计算着色器时,我是否传递了一些参数,让我找出对齐方式?
我正在编写一个 iOS 应用程序,我注意到我有几种方法来定义一个固定宽度的 16 位无符号整数。
由于这些是固定宽度(我假设相同的字节序),Apple 定义自己版本的原因可能是什么?
我有两个Cocoa Touch课程(objective-c).并且#import彼此的标题.
A类的标题定义了一个枚举,B类的标题试图使用它.由于无法识别类型,B类无法编译.
我认为这是一个循环依赖问题,但我认为@class不会有太多帮助,因为问题是枚举.
你有什么建议?
libxml2似乎将所有字符串存储在UTF-8中,如xmlChar *.
/**
* xmlChar:
*
* This is a basic byte in an UTF-8 encoded string.
* It's unsigned allowing to pinpoint case where char * are assigned
* to xmlChar * (possibly making serialization back impossible).
*/
typedef unsigned char xmlChar;
Run Code Online (Sandbox Code Playgroud)
由于libxml2是一个C库,没有提供程序来得到一个std::wstring出来的xmlChar *.我想知道在C++ 11中转换为a 的谨慎方法是使用mbstowcs C函数,通过类似这样的东西(正在进行中):xmlChar *std::wstring
std::wstring xmlCharToWideString(const xmlChar *xmlString) {
if(!xmlString){abort();} //provided string was null
int charLength = xmlStrlen(xmlString); //excludes null terminator …Run Code Online (Sandbox Code Playgroud) 我正在编译为GCC编写的代码,在Visual C++ 2012中.我收到有关枚举值截断的警告,其中包含以下枚举(由于值超出了int的范围):
enum tile_flags {
TILE_FLAG_INNER_FLAME= 0x10000000ULL,
TILE_FLAG_CONSTRICTED= 0x20000000ULL,
TILE_FLAG_MIMIC_INEPT 0x2000000000ULL
TILE_FLAG_MIMIC 0x4000000000ULL
TILE_FLAG_MIMIC_RAVEN 0x6000000000ULL
TILE_FLAG_MIMIC_MASK 0x6000000000ULL
}
Run Code Online (Sandbox Code Playgroud)
在编译x86时,看起来MSVC会简单地截断枚举值以适应32位.但是,GCC中没有发生截断.海湾合作委员会发生了什么?我怎样才能为MSVC做这项工作?
我对这种行为感到困惑Assembly.LoadFrom.在我的应用程序中,我调用Assembly.LoadFrom.NET .exe并使用它来启动它EntryPoint.Invoke(这种奇怪的方法对于在非Windows平台上构建启动器应用程序非常有用).
我曾假设,因为它assemblyFile位于不同的文件夹中,所以它无法找到与它位于同一文件夹中的某些托管 .dll依赖项.但它奏效了; 它并没有失败......
这样看来,当我打电话Assembly.LoadFrom(assemblyFile),它包含检查的文件夹assemblyFile进行管理的依赖关系assemblyFile.我没想到这一点.如果该程序集具有非托管依赖项(例如a DllImport)会发生什么情况,它仍会搜索同一目录吗?这个行为框架是否具体?
每当我尝试渲染纹理四边形时,我最终会得到纹理扭曲的三角形部分:请参阅此图像http://i45.tinypic.com/14mgnkn.png.
纹理是在GIMP中创建的PNG,我尝试了两种单独的加载纹理的方法(均来自Apple自己的示例代码).每种加载纹理的方法产生不同的结果(我不知道它是否是不同的默认设置,或者纹理是否有问题),但我无法正确渲染.
我已尝试以多种不同的方式设置我的索引/ Verticle/texices,从最快的方式发布的建议到在OpenGL ES中绘制四边形?但仍然没有运气.
我能错过什么?
加载纹理的代码
- (GLuint)setupTexture:(NSString *)fileName {
CGImageRef spriteImage = [UIImage imageNamed:fileName].CGImage;
if (!spriteImage) {
NSLog(@"Failed to load image %@", fileName);
exit(1);
}
size_t width = CGImageGetWidth(spriteImage);
size_t height = CGImageGetHeight(spriteImage);
GLubyte * spriteData = (GLubyte *) calloc(width*height*4, sizeof(GLubyte));
CGContextRef spriteContext = CGBitmapContextCreate(spriteData, width, height, 8, width*4,
CGImageGetColorSpace(spriteImage), kCGImageAlphaPremultipliedLast);
CGContextDrawImage(spriteContext, CGRectMake(0, 0, width, height), spriteImage);
CGContextRelease(spriteContext);
GLuint texName;
glGenTextures(1, &texName);
glBindTexture(GL_TEXTURE_2D, texName);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, …Run Code Online (Sandbox Code Playgroud) 我想discard在我的片段着色器中阻止该片段写入模板缓冲区;我对游戏中的视觉效果有一个想法,如果我可以依赖该行为,那么它可能是可以实现的discard。
我的片段着色器没有做任何非常奇特的事情;它只是对纹理进行采样,如果 alpha 接近 0,则discard否则写入。
void main()
{
vec4 texColor = texture(tex, texCoord);
if(texColor.a < 0.5f)
{
discard;
}
FragColor = texColor;
}
Run Code Online (Sandbox Code Playgroud)
然而,听起来我不能依赖于discard阻止模板缓冲区被写入:
如果模板测试处于活动状态,则丢弃的片段仍会影响模板缓冲区。即使模板或深度测试失败,模板测试也可以修改模板缓冲区。并且由于模板测试发生在深度测试之前,因此深度测试失败不能阻止模板测试更新模板缓冲区。
我确实需要在渲染时激活模板测试。我不能依靠discard阻止写入模板缓冲区吗?
c# ×5
.net ×3
ios ×3
objective-c ×3
c++ ×2
opengl ×2
opengl-4 ×2
xcode ×2
32bit-64bit ×1
boxing ×1
c ×1
cil ×1
cocoa-touch ×1
dllimport ×1
gcc ×1
glsl ×1
interop ×1
libxml2 ×1
opengl-es ×1
optimization ×1
shader ×1
string ×1
unicode ×1
visual-c++ ×1