[win32] adding simple IPC to test delegated surface
This commit is contained in:
parent
1dfc5dd684
commit
2560ddd5b4
|
@ -7,13 +7,44 @@
|
|||
|
||||
#include<stdlib.h>
|
||||
#include<stdio.h>
|
||||
#include<unistd.h>
|
||||
|
||||
#define MG_INCLUDE_GL_API 1
|
||||
#include"milepost.h"
|
||||
|
||||
#define LOG_SUBSYSTEM "Main"
|
||||
|
||||
#ifdef OS_WIN64
|
||||
#include<process.h>
|
||||
#include<io.h>
|
||||
#include<fcntl.h>
|
||||
|
||||
#define dup2 _dup2
|
||||
#define pipe(fds) _pipe(fds, 256, O_BINARY)
|
||||
#define read _read
|
||||
#define write _write
|
||||
#define itoa _itoa
|
||||
|
||||
void spawn_child(char* program, char** argv)
|
||||
{
|
||||
_spawnv(P_NOWAIT, program, argv);
|
||||
}
|
||||
|
||||
#elif OS_MACOS
|
||||
#include<unistd.h>
|
||||
|
||||
void spwan_child(char* program, char** argv)
|
||||
{
|
||||
pid_t pid = fork();
|
||||
if(!pid)
|
||||
{
|
||||
char* envp[] = {0};
|
||||
execve(program, argv, envp);
|
||||
assert(0);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
unsigned int program;
|
||||
|
||||
const char* vshaderSource =
|
||||
|
@ -55,7 +86,7 @@ void compile_shader(GLuint shader, const char* source)
|
|||
}
|
||||
}
|
||||
|
||||
int child_main()
|
||||
int child_main(int writeFd)
|
||||
{
|
||||
mp_init();
|
||||
|
||||
|
@ -107,11 +138,13 @@ int child_main()
|
|||
glUseProgram(program);
|
||||
|
||||
//NOTE: create surface server and start sharing surface
|
||||
mg_surface_server server = mg_surface_server_create();
|
||||
mg_surface_connection_id connectionID = mg_surface_server_start(server, surface);
|
||||
// mg_surface_server server = mg_surface_server_create();
|
||||
// mg_surface_connection_id connectionID = mg_surface_server_start(server, surface);
|
||||
|
||||
mg_surface_connection_id connectionID = 123456789;
|
||||
|
||||
//NOTE: send context id to parent
|
||||
write(3, &connectionID, sizeof(connectionID));
|
||||
write(writeFd, &connectionID, sizeof(connectionID));
|
||||
|
||||
//NOTE: render loop
|
||||
while(!mp_should_quit())
|
||||
|
@ -173,13 +206,16 @@ int main(int argc, char** argv)
|
|||
{
|
||||
if(!strcmp(argv[1], "--child"))
|
||||
{
|
||||
return(child_main());
|
||||
int writeFd = atoi(argv[2]);
|
||||
printf("child process created with file desc %i\n", writeFd);
|
||||
return(child_main(writeFd));
|
||||
}
|
||||
else
|
||||
{
|
||||
return(-1);
|
||||
}
|
||||
}
|
||||
setvbuf( stdout, NULL, _IONBF, 0 );
|
||||
mp_init();
|
||||
|
||||
//NOTE: create main window
|
||||
|
@ -187,22 +223,20 @@ int main(int argc, char** argv)
|
|||
mp_window window = mp_window_create(rect, "test", 0);
|
||||
|
||||
//NOTE: create surface client
|
||||
mg_surface surface = mg_surface_client_create_for_window(window);
|
||||
// mg_surface surface = mg_surface_client_create_for_window(window);
|
||||
|
||||
|
||||
//TODO setup descriptors
|
||||
//NOTE setup descriptors
|
||||
int fileDesc[2];
|
||||
pipe(fileDesc);
|
||||
|
||||
pid_t pid = fork();
|
||||
if(!pid)
|
||||
{
|
||||
dup2(fileDesc[1], 3);
|
||||
char* argv[] = {"bin/example_surface_sharing", "--child", 0};
|
||||
char* envp[] = {0};
|
||||
execve("./bin/example_surface_sharing", argv, envp);
|
||||
assert(0);
|
||||
}
|
||||
printf("parent process created readFd %i and writeFd %i\n", fileDesc[0], fileDesc[1]);
|
||||
|
||||
char writeDescStr[64];
|
||||
itoa(fileDesc[1], writeDescStr, 10);
|
||||
char* args[] = {"bin/example_surface_sharing", "--child", writeDescStr, 0};
|
||||
|
||||
spawn_child(args[0], args);
|
||||
|
||||
//NOTE: read the connection id
|
||||
mg_surface_connection_id connectionID = 0;
|
||||
|
@ -210,7 +244,7 @@ int main(int argc, char** argv)
|
|||
printf("received child connection id %llu\n", connectionID);
|
||||
|
||||
//NOTE: connect the client
|
||||
mg_surface_client_connect(surface, connectionID);
|
||||
// mg_surface_client_connect(surface, connectionID);
|
||||
|
||||
//NOTE: show the window
|
||||
mp_window_bring_to_front(window);
|
||||
|
|
Loading…
Reference in New Issue