小编Mic*_*zic的帖子

使Xcode嵌入必要的dylib

我正在尝试做一些非常简单和典型的事情,它在我的Xcode项目中使用动态链接库,然后部署嵌入了所有必需的库.

但是我必须以错误的方式做某事,因为Xcode 8不允许我嵌入.dylib文件,只有框架!下面的图片是当我尝试向嵌入式Binaires添加任何东西时发生的事情,dylib只是不显示,而Add Other ...将它们添加到项目中但不添加到嵌入式二进制文件中.

Xcode不允许我添加任何dylib作为嵌入式二进制文件

必须有一个非常简单的方法,但我找不到它...

结语

显然,因为我确实需要运行一个调用脚本,install_lib_tool我创建了一个非常通用的脚本,它将改变/local/嵌入式副本路径中的任何内容:

#!/bin/sh

app=$BUILT_PRODUCTS_DIR/$EXECUTABLE_PATH
fw_path=$BUILT_PRODUCTS_DIR/$FRAMEWORKS_FOLDER_PATH
app_dyl_list=(`ls $fw_path | grep dylib`)

function change_paths {
    local bin=$1
    echo change_path $bin
    dyl_list=(`otool -L $bin | grep local | awk '{print $1}'`)

    for dyl in ${dyl_list[*]}; do
        libname=$(basename $dyl)
        libname=${libname%%.*}
        actual_libname=(`ls $fw_path | grep $libname | xargs basename`)
        install_name_tool -change $dyl "@executable_path/../Frameworks/$actual_libname" $bin
        printf "\t%s edited\n" $actual_libname
    done
}

change_paths $app
for dyl_bin in ${app_dyl_list[*]}; do
    change_paths $fw_path/$dyl_bin
done
Run Code Online (Sandbox Code Playgroud)

然后,只需在复制dylib之后添加一个Run Script步骤,就可以在没有参数的情况下运行它(环境变量包含所需的一切).

macos xcode dylib macos-sierra

13
推荐指数
1
解决办法
3562
查看次数

加入混合抗锯齿线时浸渍

我在使用混合模式时连接两个抗锯齿线时遇到问题,我在它们加入的点处进行了下降.通过混合模式,我的意思是我通过计算线颜色与背景颜色的比率来绘制我的抗锯齿线,因此当像素的比率例如是70%时,新像素是0.7*线颜色+ 0.3*背景颜色.我对行的抗锯齿功能基本上是由一个错误函数构成的(虽然我认为大多数抗锯齿函数都会产生同样的问题),如下所示:

0.5 + 0.5erf(-x)

因此,当两条线相遇时,一条线一条接一条,你会得到一个下降,两条线的关节下降到它应该达到的强度的75%,因为在那一点,50%的背景保留在第一条线上,然后,当剩下0%时,第二条线被抽出后,50%的50%仍然存在:

1  - (0.5erfc(-x)*0.5erfc(x))

我只能假设用连接线绘制抗锯齿光栅图形是一个常见问题,所以它必须有一个共同的解决方案,但我不知道这是什么.谢谢!

另外:为了清楚如何绘制线条,宽度上的线条是用高斯函数(e ^ -x*x)制作的,并且使用凸起的误差函数对两端进行四舍五入.您可以通过在WolframAlpha中输入'0.5erfc(-x-5)*0.5erfc(x-5)*e ^( - y*y)'来查看10 px长水平线的示例.

algorithm graphics drawing antialiasing raster-graphics

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

在段落中添加N个换行符以获得最窄的结果

假设我们有一个像这样的段落:

Lorem ipsum dolor sit amet,consectetur adipiscing elit,sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.Ut enim ad minim veniam,quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.Duis aute irure dolor in repreptderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.Excepteur sint occaecat cupidatat non proident,sunt in culpa qui officia deserunt mollit anim id est laborum.

假设固定宽度字体,我们想要准确添加N个换行符(仅通过替换空格字符)来生成N + 1行文本块.

这是N = 8的输出示例,我们得到的最大线宽为51:

Lorem ipsum dolor sit amet, consectetur adipiscing 
elit, sed do eiusmod …
Run Code Online (Sandbox Code Playgroud)

arrays string algorithm partitioning

6
推荐指数
2
解决办法
127
查看次数

OpenCL / OpenGL互操作浪费CPU

我每次使用一个OpenCL内核调用以每秒60次的速度在OpenCL中生成帧,并将它们写入OpenGL纹理,以便可以在屏幕上显示它们。没有性能问题,帧速率符合预期,但问题是非常浪费,即使有很少的工作,它也至少要占用一个CPU内核完全繁忙,例如以非常低的分辨率绘制空白帧。为了进行比较,当我不使用OpenGL互操作,而是从CL内核写入通用缓冲区,然后将该缓冲区复制回主机,然后以另一种方式显示它时,帧速率会下降一点(由于后面和后面)互操作使不必要的开销增加了),但是当无所事事时,CPU使用率就会大大降低。

这意味着我认为互操作的方式存在问题,我认为这必须造成某种繁忙的等待。

这是相关的代码,这是我使用互操作程序时存在的代码,而不使用不存在时存在的代码。在循环的一个地方,我清除了GL纹理并让OpenCL获得它:

    uint32_t z = 0;
    glClearTexImage(fb.gltex, 0, GL_RGBA, GL_UNSIGNED_BYTE, &z);
    glFlush();
    glFinish();

    clEnqueueAcquireGLObjects(fb.clctx.command_queue, 1,  &fb.cl_srgb, 0, 0, NULL);
Run Code Online (Sandbox Code Playgroud)

然后,我排队执行我的OpenCL内核,该内核将纹理作为cl_mem对象写入,fb.cl_srgb然后将控制权交还给OpenGL,以便在显示屏上显示纹理:

    clEnqueueReleaseGLObjects(fb.clctx.command_queue, 1, &fb.cl_srgb, 0, 0, NULL);
    clFinish(fb.clctx.command_queue);   // this blocks until the kernel is done writing to the texture and releasing the texture

    // setting GL texture coordinates, probably not relevant to this question
    float hoff = 2. * (fb.h - fb.maxdim.y) / (double) fb.maxdim.y;
    glLoadIdentity();             // Reset the projection matrix
    glViewport(0, 0, fb.maxdim.x, fb.maxdim.y); …
Run Code Online (Sandbox Code Playgroud)

opengl opencl

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

从固定点atan2()近似中删除慢的int64除法

我做了一个函数来计算atan2(y,x)的定点近似.问题在于运行整个函数所需的~83个循环,70个循环(在AMD FX-6100上使用gcc 4.9.1 mingw-w64 -O3进行编译)完全由一个简单的64位整数除法完成!遗憾的是,该分裂的任何条款都不变.我能加速分裂吗?有什么方法可以删除它吗?

我想我需要这个除法,因为我用1D查找表近似atan2(y,x)我需要将x,y表示的点的距离标准化为单位圆或单位正方形(我选择了一个单位')菱形'是一个旋转45°的单位正方形,在正象限上提供非常均匀的精度).所以除法找到(| y | - | x |)/(| y | + | x |).注意,除数是32位,而分子是32位数,右移29位,因此除法的结果有29个小数位.同样使用浮点除法不是一个选项,因为此函数不需要使用浮点运算.

有任何想法吗?我想不出有什么可以改善这一点(我无法弄清楚为什么只需要一个师就需要70个周期).这是完整的参考功能:

int32_t fpatan2(int32_t y, int32_t x)       // does the equivalent of atan2(y, x)/2pi, y and x are integers, not fixed point
{
    #include "fpatan.h" // includes the atan LUT as generated by tablegen.exe, the entry bit precision (prec), LUT size power (lutsp) and how many max bits |b-a| takes (abdp)
    const uint32_t outfmt = 32; // final output format in s0.outfmt
    const …
Run Code Online (Sandbox Code Playgroud)

c optimization fixed-point integer-division approximation

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

将两个64位整数乘以128位然后>>到64位的最快方法?

我需要乘两个符号的64位整数ab在一起,然后转移(128位)的结果到一个符号的64位整数.最快的方法是什么?

我的64位整数实际上代表具有fmt小数位的定点数.fmt被选择为使得a * b >> fmt不应溢出,例如abs(a) < 64<<fmtabs(b) < 2<<fmtfmt==56永远不会溢出64位作为最终结果将是< 128<<fmt,因此适合在一个Int64.

我想这样做的原因是为了快速准确地评估((((c5*x + c4)*x + c3)*x + c2)*x + c1)*x + c0定点格式的形式的五次多项式,每个数字都是带有fmt小数位的带符号的64位定点数.我正在寻找实现这一目标的最有效方法.

c integer fixed-point int128

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

如何在 24 bpp 显示器上最好地显示 30+ bpp 图形?

在常规 24 bpp 显示器上显示每通道超过 8 位的最忠实图形的最佳方法是什么?

algorithm graphics image-processing dithering

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