我有一些 C 代码来渲染一些 OpenGL 内容,它可以在 Android 和 iOS 上运行。在 Android 上看起来不错。但在 iOS 上它是垂直翻转的。
下面是一些简单的代码来演示(因为OpenGL C代码很啰嗦,所以只复制了相关部分):
GLfloat vVertices[] = {
0.0f, 0.5f,
-0.5f, -0.5f,
0.5f, -0.5f
};
glViewport(0, 0, context->width, context->height);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glUseProgram(data->programObject);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, vVertices);
glEnableVertexAttribArray(0);
glDrawArrays(GL_TRIANGLES, 0, 3);
glDisableVertexAttribArray(0);
Run Code Online (Sandbox Code Playgroud)
在 Android 上它看起来像这样:
但在 iOS 上它看起来像这样:
两个平台之间唯一的区别是 OpenGL ES 的初始化代码,因为所有 OpenGL 代码都是共享的 C 代码。但是,我看不出初始化代码有任何明显的错误。
这是初始化代码(我删除了大部分错误处理,因为除了我留下的错误之外,没有任何错误被触发):
- (void)initGL {
_context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES3];
[EAGLContext setCurrentContext:_context];
[self createCVBufferWithSize:_renderSize withRenderTarget:&_target withTextureOut:&_texture];
glBindTexture(CVOpenGLESTextureGetTarget(_texture), CVOpenGLESTextureGetName(_texture));
glTexImage2D(GL_TEXTURE_2D, // target
0, …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用jparsec来定义和利用我相当简单的语法,但我对如何解决它完全感到困惑.我不知道在这一点上是否是我对问题空间的不充分理解,或者jparsec的稀疏和无信息文档.或两者.
我有一个像这样的语法:
foo='abc' AND bar<>'def' OR (biz IN ['a', 'b', 'c'] AND NOT baz = 'foo')
Run Code Online (Sandbox Code Playgroud)
所以你可以看到它支持运营商,如AND,OR,NOT,IN,=,<>.它还支持任意嵌套的括号来指示优先级.
我认为我在标记方面做得相当远.这就是我所拥有的:
public final class NewParser {
// lexing
private static final Terminals OPERATORS = Terminals.operators("=", "OR", "AND", "NOT", "(", ")", "IN", "[", "]", ",", "<>");
private static final Parser<?> WHITESPACE = Scanners.WHITESPACES;
private static final Parser<?> FIELD_NAME_TOKENIZER = Terminals.Identifier.TOKENIZER;
private static final Parser<?> QUOTED_STRING_TOKENIZER = Terminals.StringLiteral.SINGLE_QUOTE_TOKENIZER.or(Terminals.StringLiteral.DOUBLE_QUOTE_TOKENIZER);
private static final Parser<?> IGNORED …Run Code Online (Sandbox Code Playgroud) 我正在通过Cecil生成一些代码.代码生成没有错误,但当我尝试加载程序集时,我得到:
DataSerializersTest.exe中发生了未处理的"System.InvalidProgramException"类型异常
附加信息:公共语言运行时检测到无效程序.
这是生成的IL:
.method public static
class Data.FooData Read (
class [mscorlib]System.IO.BinaryReader input
) cil managed
{
// Method begins at RVA 0x3a58
// Code size 60 (0x3c)
.maxstack 3
.locals (
[0] class Data.FooData,
[1] valuetype [System.Runtime]System.Nullable`1<int32>
)
IL_0000: newobj instance void Data.FooData::.ctor()
IL_0005: stloc.0
IL_0006: ldloc.0
IL_0007: ldarg.0
IL_0008: callvirt instance bool [System.IO]System.IO.BinaryReader::ReadBoolean()
IL_000d: ldc.i4.0
IL_000e: ceq
IL_0010: brtrue.s IL_001f
IL_0012: ldarg.0
IL_0013: callvirt instance int32 [System.IO]System.IO.BinaryReader::ReadInt32()
IL_0018: newobj instance void valuetype [System.Runtime]System.Nullable`1<int32>::.ctor(!0)
IL_001d: br.s IL_0028
IL_001f: …Run Code Online (Sandbox Code Playgroud) 我正在开发部署到 Azure 的 Service Fabric 应用程序。它目前仅包含 5 个无状态服务。压缩档案的重量约为 200MB,这已经成为问题。
通过检查存档的内容,我可以看到主要问题是所有服务都需要许多文件。因此,每个服务的文件夹中都存在这些文件的完全副本。但是,zip 压缩格式对于存档中的重复文件并没有做任何聪明的事情。
作为一项实验,我编写了一个小脚本来查找部署中的所有重复文件,并删除每个文件中除一个之外的所有文件。然后我尝试对结果进行压缩,结果得到了更实用的 38MB。
我还注意到系统库是捆绑的,包括:
这些都是大文件,所以我很想知道是否有办法只将它们捆绑一次。我试过完全删除它们,但 Service Fabric 无法启动应用程序。
任何人都可以就我如何大幅减少部署包的大小提供任何建议吗?
注意:我已经阅读了有关压缩包的文档,但我很困惑为什么他们的压缩方法会有所帮助。确实,我试过了,但没有。他们所做的只是将主 zip 中的每个子文件夹压缩,但不涉及文件重复数据删除。
为了调试第三方库中的问题,我将他们的源代码复制到我自己的git仓库中.我立刻重现了这个问题所以想要记录一个起点.当我尝试提交时,我复制的所有文件都没有显示在我的工作树中,因此我无法进行分级.
我尝试在复制的源中显式暂存其中一个文件:
git add README
fatal: Path 'Src/Foo/README' is in submodule 'Src/Foo/FooBar'
Run Code Online (Sandbox Code Playgroud)
所以似乎git认为它是一个子模块,尽管我从来没有告诉过它.我尝试删除第三方源的根目录中的.git目录,但这没有帮助.然后我尝试按照这些说明操作,但它告诉我没有子模块:
git submodule deinit .
No submodule mapping found in .gitmodules for path 'Src/Foo/FooBar'
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我正在试图弄清楚如何采用可观察的序列T并获得T我的订阅者中最近和以前的值.这是我的秒杀代码:
static void Main(string[] args)
{
var latest = new Subject<string>();
var previous = latest.SkipLast(1);
var latestWithPrevious = latest.CombineLatest(previous, (l, p) => new { Latest = l, Previous = p });
latestWithPrevious.Subscribe(x => Console.WriteLine("Latest: {0} Previous: {1}", x.Latest, x.Previous));
latest.OnNext("1");
latest.OnNext("2");
latest.OnNext("3");
Console.ReadKey();
}
Run Code Online (Sandbox Code Playgroud)
我想要以下输出:
Publishing 1
Publishing 2
Latest: 2 Previous: 1
Publishing 3
Latest: 3 Previous: 2
Run Code Online (Sandbox Code Playgroud)
但是,我得到以下内容:
Publishing 1
Publishing 2
Latest: 2 Previous: 1
Publishing 3
Latest: 3 Previous: 1
Latest: 3 …Run Code Online (Sandbox Code Playgroud) 在 C# 中使用 gRPC 时,异步调用返回AsyncUnaryCall<T>(对于一元调用 - 当然,其他调用的返回类型略有不同)。但是,AsyncUnaryCall<T>不扩展Task<T>。因此,您通常使用 aTask<T>执行的常见操作不适用于AsyncUnaryCall<T>. 这包括:
ConfigureAwait)Task.WhenAny和这样的助手Task.WhenAll后者目前正在咬我,因为我想启动多个 gRPC 调用并等待它们全部完成。看来我唯一的办法就是写一个小帮手,一个接一个地等待。
为什么不AsyncUnaryCall<T>反映 中的功能Task<T>?
在 VS Code 中格式化 C 代码时,似乎坚持在 80 个字符处换行。我想会有一个设置来控制这个,但我一生都找不到一个。
有谁知道如何在 VS Code 中设置用于包装 C 代码的列宽?
我是 AWS 和 SAM 的新手,所以这可能是一个显而易见的问题,但我就是找不到答案。我正在尝试构建一个 SAM 模板,该模板允许用户注入一个参数,该参数将影响其中所有资源的名称。具体来说,可以传入一个“环境”参数,然后使用该参数来限定所有资源名称:
AWSTemplateFormatVersion: "2010-09-09"
Transform: "AWS::Serverless-2016-10-31"
Parameters:
EnvironmentParameter:
Type: "String"
Default: "default"
Resources:
GetTermsAndConditionsFunction:
Type: "AWS::Serverless::Function"
Properties:
# TODO: prepend the environment somehow so I get "$ENVIRONMENT_MyFunction" instead
FunctionName: "MyFunction"
Handler: "..."
...
Run Code Online (Sandbox Code Playgroud)
如何动态构建FunctionNameusing EnvironmentParameter?
c# ×3
.net ×2
c ×2
android ×1
asynchronous ×1
aws-sam ×1
cil ×1
deployment ×1
formatting ×1
git ×1
grpc ×1
ios ×1
java ×1
jparsec ×1
mono.cecil ×1
opengl-es ×1